Protect against emitting inactivityDetected() while it'is still processed.

This commit is contained in:
Felix Geyer 2015-07-13 21:25:48 +02:00
parent 721bec9794
commit 8ad48d6774
2 changed files with 9 additions and 0 deletions

View File

@ -67,7 +67,14 @@ bool InactivityTimer::eventFilter(QObject* watched, QEvent* event)
void InactivityTimer::timeout() void InactivityTimer::timeout()
{ {
// make sure we don't emit the signal a second time while it's still processed
if (!m_emitMutx.tryLock()) {
return;
}
if (m_active && !m_timer->isActive()) { if (m_active && !m_timer->isActive()) {
Q_EMIT inactivityDetected(); Q_EMIT inactivityDetected();
} }
m_emitMutx.unlock();
} }

View File

@ -18,6 +18,7 @@
#ifndef KEEPASSX_INACTIVITYTIMER_H #ifndef KEEPASSX_INACTIVITYTIMER_H
#define KEEPASSX_INACTIVITYTIMER_H #define KEEPASSX_INACTIVITYTIMER_H
#include <QMutex>
#include <QObject> #include <QObject>
#include "core/Global.h" #include "core/Global.h"
@ -46,6 +47,7 @@ private Q_SLOTS:
private: private:
QTimer* m_timer; QTimer* m_timer;
bool m_active; bool m_active;
QMutex m_emitMutx;
}; };
#endif // KEEPASSX_INACTIVITYTIMER_H #endif // KEEPASSX_INACTIVITYTIMER_H