From bd1eb5842a17b4b03121f697f411bb8861ec27f2 Mon Sep 17 00:00:00 2001 From: Brad Hefta-Gaub Date: Thu, 7 Apr 2016 12:45:24 -0700 Subject: [PATCH] fix crash related to menu vs watchdog create order --- interface/src/Application.cpp | 11 +++++++++-- interface/src/Application.h | 1 + interface/src/Menu.cpp | 4 +++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2512dc8b26..baca2766ab 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -241,6 +241,8 @@ public: *crashTrigger = 0xDEAD10CC; } + static void setSuppressStatus(bool suppress) { _suppressStatus = suppress; } + void run() override { while (!_quit) { QThread::sleep(HEARTBEAT_UPDATE_INTERVAL_SECS); @@ -251,7 +253,6 @@ public: auto sinceLastReport = (now > _lastReport) ? now - _lastReport : 0; auto elapsedMovingAverage = _movingAverage.getAverage(); auto menu = Menu::getInstance(); - bool suppressStatusMessages = menu ? menu->isOptionChecked(MenuOption::SupressDeadlockWatchdogStatus) : false; if (elapsedMovingAverage > _maxElapsedAverage) { qDebug() << "DEADLOCK WATCHDOG WARNING:" @@ -283,7 +284,7 @@ public: _lastReport = now; } - if (!suppressStatusMessages && sinceLastReport > HEARTBEAT_REPORT_INTERVAL_USECS) { + if (!_suppressStatus && sinceLastReport > HEARTBEAT_REPORT_INTERVAL_USECS) { qDebug() << "DEADLOCK WATCHDOG STATUS:" << "lastHeartbeatAge:" << lastHeartbeatAge << "elapsedMovingAverage:" << elapsedMovingAverage @@ -312,6 +313,7 @@ public: } } + static std::atomic _suppressStatus; static std::atomic _heartbeat; static std::atomic _lastReport; static std::atomic _maxElapsed; @@ -321,12 +323,17 @@ public: bool _quit { false }; }; +std::atomic DeadlockWatchdogThread::_suppressStatus; std::atomic DeadlockWatchdogThread::_heartbeat; std::atomic DeadlockWatchdogThread::_lastReport; std::atomic DeadlockWatchdogThread::_maxElapsed; std::atomic DeadlockWatchdogThread::_maxElapsedAverage; ThreadSafeMovingAverage DeadlockWatchdogThread::_movingAverage; +void Application::toggleSuppressDeadlockWatchdogStatus(bool checked) { + DeadlockWatchdogThread::setSuppressStatus(checked); +} + #ifdef Q_OS_WIN class MyNativeEventFilter : public QAbstractNativeEventFilter { public: diff --git a/interface/src/Application.h b/interface/src/Application.h index 116d2b2137..0bc8163f7c 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -255,6 +255,7 @@ public slots: void resetSensors(bool andReload = false); void setActiveFaceTracker() const; + void toggleSuppressDeadlockWatchdogStatus(bool checked); #ifdef HAVE_IVIEWHMD void setActiveEyeTracker(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 4ea69af2b8..f6386ba72d 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -530,7 +530,9 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::PipelineWarnings); addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::LogExtraTimings); addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SuppressShortTimings); - addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SupressDeadlockWatchdogStatus, 0, false); + addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SupressDeadlockWatchdogStatus, 0, false, + qApp, SLOT(toggleSuppressDeadlockWatchdogStatus(bool))); + // Developer > Audio >>> MenuWrapper* audioDebugMenu = developerMenu->addMenu("Audio");