Fix LiveWindow attempting to start listeners on uninitialized sendables (#1463)

Additionally adds a defensive check in SendableBuilderImpl to avoid the NPE.
This commit is contained in:
Sam Carlberg
2018-12-07 22:38:22 -05:00
committed by Peter Johnson
parent 3d546428ab
commit 97ba195b88
5 changed files with 24 additions and 8 deletions

View File

@@ -175,6 +175,10 @@ void LiveWindow::SetEnabled(bool enabled) {
std::lock_guard<wpi::mutex> lock(m_impl->mutex);
if (m_impl->liveWindowEnabled == enabled) return;
Scheduler* scheduler = Scheduler::GetInstance();
m_impl->startLiveWindow = enabled;
m_impl->liveWindowEnabled = enabled;
// Force table generation now to make sure everything is defined
UpdateValuesUnsafe();
if (enabled) {
scheduler->SetEnabled(false);
scheduler->RemoveAll();
@@ -184,13 +188,15 @@ void LiveWindow::SetEnabled(bool enabled) {
}
scheduler->SetEnabled(true);
}
m_impl->startLiveWindow = enabled;
m_impl->liveWindowEnabled = enabled;
m_impl->enabledEntry.SetBoolean(enabled);
}
void LiveWindow::UpdateValues() {
std::lock_guard<wpi::mutex> lock(m_impl->mutex);
UpdateValuesUnsafe();
}
void LiveWindow::UpdateValuesUnsafe() {
// Only do this if either LiveWindow mode or telemetry is enabled.
if (!m_impl->liveWindowEnabled && !m_impl->telemetryEnabled) return;