diff --git a/src/zm_db.cpp b/src/zm_db.cpp index 1557b8b72..b296c571b 100644 --- a/src/zm_db.cpp +++ b/src/zm_db.cpp @@ -233,9 +233,13 @@ zmDbQueue::zmDbQueue() : { } zmDbQueue::~zmDbQueue() { + stop(); +} + +void zmDbQueue::stop() { mTerminate = true; mCondition.notify_all(); - mThread.join(); + if (mThread.joinable()) mThread.join(); } void zmDbQueue::process() { diff --git a/src/zm_db.h b/src/zm_db.h index e03792df0..c243aa6d6 100644 --- a/src/zm_db.h +++ b/src/zm_db.h @@ -41,6 +41,7 @@ class zmDbQueue { void push(const char *sql) { return push(std::string(sql)); }; void push(std::string &&sql); void process(); + void stop(); }; class zmDbRow { diff --git a/src/zmc.cpp b/src/zmc.cpp index 84885a583..670316791 100644 --- a/src/zmc.cpp +++ b/src/zmc.cpp @@ -376,6 +376,7 @@ int main(int argc, char *argv[]) { } Image::Deinitialise(); + dbQueue.stop(); Debug(1, "terminating"); logTerm(); zmDbClose();