-added mutex thread protection. getting sigmentation faults on the
 test machine. added thread protection on various shared
 parameters in hope that it fix the random crashing issue.
This commit is contained in:
Zii 2023-06-10 21:51:39 -04:00
parent 51218198b5
commit 09a0f030ac
3 changed files with 19 additions and 1 deletions

View File

@ -248,8 +248,10 @@ bool Upkeep::exec()
dumpLogs(QString("logs/") + REC_LOG_NAME, shared->recLog); dumpLogs(QString("logs/") + REC_LOG_NAME, shared->recLog);
dumpLogs(QString("logs/") + DET_LOG_NAME, shared->detLog); dumpLogs(QString("logs/") + DET_LOG_NAME, shared->detLog);
shared->logMutex.lock();
shared->recLog.clear(); shared->recLog.clear();
shared->detLog.clear(); shared->detLog.clear();
shared->logMutex.unlock();
initLogFrontPages(); initLogFrontPages();
enforceMaxEvents(shared); enforceMaxEvents(shared);
@ -308,6 +310,8 @@ bool EventLoop::exec()
while (!shared->recList.isEmpty()) while (!shared->recList.isEmpty())
{ {
shared->recMutex.lock();
auto event = shared->recList[0]; auto event = shared->recList[0];
auto maxFiles = shared->evMaxSecs / 2; auto maxFiles = shared->evMaxSecs / 2;
// there's 2 secs in each hls segment // there's 2 secs in each hls segment
@ -324,6 +328,7 @@ bool EventLoop::exec()
vidList.append(forwardFacingFiles("live", ".ts", event.timeStamp, maxFiles / 2)); vidList.append(forwardFacingFiles("live", ".ts", event.timeStamp, maxFiles / 2));
shared->recList.removeFirst(); shared->recList.removeFirst();
shared->recMutex.unlock();
} }
} }
@ -494,7 +499,9 @@ bool DetectLoop::exec()
event.score = score; event.score = score;
event.imgPath = images[pos]; event.imgPath = images[pos];
shared->recMutex.lock();
shared->recList.append(event); mod = true; shared->recList.append(event); mod = true;
shared->recMutex.unlock();
} }
} }
} }

View File

@ -25,10 +25,11 @@
#include <QThread> #include <QThread>
#include <QTimer> #include <QTimer>
#include <QStringList> #include <QStringList>
#include <QMutex>
using namespace std; using namespace std;
#define APP_VER "3.0.t15" #define APP_VER "3.0.t16"
#define APP_NAME "Motion Watch" #define APP_NAME "Motion Watch"
#define APP_BIN "mow" #define APP_BIN "mow"
#define REC_LOG_NAME "rec_log_lines.html" #define REC_LOG_NAME "rec_log_lines.html"
@ -49,6 +50,8 @@ struct evt_t
struct shared_t struct shared_t
{ {
QList<evt_t> recList; QList<evt_t> recList;
QMutex recMutex;
QMutex logMutex;
QString conf; QString conf;
QString recLog; QString recLog;
QString detLog; QString detLog;

View File

@ -14,12 +14,20 @@
void recLog(const QString &line, shared_t *share) void recLog(const QString &line, shared_t *share)
{ {
share->logMutex.lock();
share->recLog += QDateTime::currentDateTime().toString("[yyyy-MM-dd-hh-mm-ss] ") + line + "<br>\n"; share->recLog += QDateTime::currentDateTime().toString("[yyyy-MM-dd-hh-mm-ss] ") + line + "<br>\n";
share->logMutex.unlock();
} }
void detLog(const QString &line, shared_t *share) void detLog(const QString &line, shared_t *share)
{ {
share->logMutex.lock();
share->detLog += QDateTime::currentDateTime().toString("[yyyy-MM-dd-hh-mm-ss] ") + line + "<br>\n"; share->detLog += QDateTime::currentDateTime().toString("[yyyy-MM-dd-hh-mm-ss] ") + line + "<br>\n";
share->logMutex.unlock();
} }
void enforceMaxLogSize(const QString &filePath, shared_t *share) void enforceMaxLogSize(const QString &filePath, shared_t *share)