fix crash related to menu vs watchdog create order

This commit is contained in:
Brad Hefta-Gaub 2016-04-07 12:45:24 -07:00
parent f3275b680b
commit bd1eb5842a
3 changed files with 13 additions and 3 deletions

View file

@ -241,6 +241,8 @@ public:
*crashTrigger = 0xDEAD10CC; *crashTrigger = 0xDEAD10CC;
} }
static void setSuppressStatus(bool suppress) { _suppressStatus = suppress; }
void run() override { void run() override {
while (!_quit) { while (!_quit) {
QThread::sleep(HEARTBEAT_UPDATE_INTERVAL_SECS); QThread::sleep(HEARTBEAT_UPDATE_INTERVAL_SECS);
@ -251,7 +253,6 @@ public:
auto sinceLastReport = (now > _lastReport) ? now - _lastReport : 0; auto sinceLastReport = (now > _lastReport) ? now - _lastReport : 0;
auto elapsedMovingAverage = _movingAverage.getAverage(); auto elapsedMovingAverage = _movingAverage.getAverage();
auto menu = Menu::getInstance(); auto menu = Menu::getInstance();
bool suppressStatusMessages = menu ? menu->isOptionChecked(MenuOption::SupressDeadlockWatchdogStatus) : false;
if (elapsedMovingAverage > _maxElapsedAverage) { if (elapsedMovingAverage > _maxElapsedAverage) {
qDebug() << "DEADLOCK WATCHDOG WARNING:" qDebug() << "DEADLOCK WATCHDOG WARNING:"
@ -283,7 +284,7 @@ public:
_lastReport = now; _lastReport = now;
} }
if (!suppressStatusMessages && sinceLastReport > HEARTBEAT_REPORT_INTERVAL_USECS) { if (!_suppressStatus && sinceLastReport > HEARTBEAT_REPORT_INTERVAL_USECS) {
qDebug() << "DEADLOCK WATCHDOG STATUS:" qDebug() << "DEADLOCK WATCHDOG STATUS:"
<< "lastHeartbeatAge:" << lastHeartbeatAge << "lastHeartbeatAge:" << lastHeartbeatAge
<< "elapsedMovingAverage:" << elapsedMovingAverage << "elapsedMovingAverage:" << elapsedMovingAverage
@ -312,6 +313,7 @@ public:
} }
} }
static std::atomic<bool> _suppressStatus;
static std::atomic<uint64_t> _heartbeat; static std::atomic<uint64_t> _heartbeat;
static std::atomic<uint64_t> _lastReport; static std::atomic<uint64_t> _lastReport;
static std::atomic<uint64_t> _maxElapsed; static std::atomic<uint64_t> _maxElapsed;
@ -321,12 +323,17 @@ public:
bool _quit { false }; bool _quit { false };
}; };
std::atomic<bool> DeadlockWatchdogThread::_suppressStatus;
std::atomic<uint64_t> DeadlockWatchdogThread::_heartbeat; std::atomic<uint64_t> DeadlockWatchdogThread::_heartbeat;
std::atomic<uint64_t> DeadlockWatchdogThread::_lastReport; std::atomic<uint64_t> DeadlockWatchdogThread::_lastReport;
std::atomic<uint64_t> DeadlockWatchdogThread::_maxElapsed; std::atomic<uint64_t> DeadlockWatchdogThread::_maxElapsed;
std::atomic<int> DeadlockWatchdogThread::_maxElapsedAverage; std::atomic<int> DeadlockWatchdogThread::_maxElapsedAverage;
ThreadSafeMovingAverage<int, DeadlockWatchdogThread::HEARTBEAT_SAMPLES> DeadlockWatchdogThread::_movingAverage; ThreadSafeMovingAverage<int, DeadlockWatchdogThread::HEARTBEAT_SAMPLES> DeadlockWatchdogThread::_movingAverage;
void Application::toggleSuppressDeadlockWatchdogStatus(bool checked) {
DeadlockWatchdogThread::setSuppressStatus(checked);
}
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
class MyNativeEventFilter : public QAbstractNativeEventFilter { class MyNativeEventFilter : public QAbstractNativeEventFilter {
public: public:

View file

@ -255,6 +255,7 @@ public slots:
void resetSensors(bool andReload = false); void resetSensors(bool andReload = false);
void setActiveFaceTracker() const; void setActiveFaceTracker() const;
void toggleSuppressDeadlockWatchdogStatus(bool checked);
#ifdef HAVE_IVIEWHMD #ifdef HAVE_IVIEWHMD
void setActiveEyeTracker(); void setActiveEyeTracker();

View file

@ -530,7 +530,9 @@ Menu::Menu() {
addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::PipelineWarnings); addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::PipelineWarnings);
addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::LogExtraTimings); addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::LogExtraTimings);
addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SuppressShortTimings); addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SuppressShortTimings);
addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SupressDeadlockWatchdogStatus, 0, false); addCheckableActionToQMenuAndActionHash(timingMenu, MenuOption::SupressDeadlockWatchdogStatus, 0, false,
qApp, SLOT(toggleSuppressDeadlockWatchdogStatus(bool)));
// Developer > Audio >>> // Developer > Audio >>>
MenuWrapper* audioDebugMenu = developerMenu->addMenu("Audio"); MenuWrapper* audioDebugMenu = developerMenu->addMenu("Audio");