From 1b1d3a18a8fffdd61f533fd4b0bde4f75d683212 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 27 Jul 2013 07:18:32 +0200 Subject: Cleanup closeEvent Don't try to delete all the prepared statements manually. Get rid of the ~destructors and just close the QSqlDatabase. close() deletes all Statements. Also, quit() all QThreads on closeEvent() except CompleterProducer. When the experimental archive view gets merged, that QThread is gone. No need to bother... --- smdirwatcher.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'smdirwatcher.cpp') diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp index a6163c2..371e7cf 100644 --- a/smdirwatcher.cpp +++ b/smdirwatcher.cpp @@ -86,7 +86,17 @@ void SmDirWatcher::run(){ } } -SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields), mCheckForPresent(true) { +void SmDirWatcher::stop(){ + mSemFree->acquire(); + mCollector->stop(); + mSemUsed->release(); + if(mCollector->isRunning()){ + mCollector->wait(); + } + quit(); +} + +SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields), mCheckForPresent(true), mCancel(false) { QSqlDatabase db = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "collectordb"); db.open(); mPicPresentQ = new QSqlQuery(db); @@ -109,6 +119,11 @@ void SmDataColletor::setCheckForPresent(bool present){ void SmDataColletor::run(){ forever { mSemUsed->acquire(); + if(mCancel){ + QSqlDatabase::database("collectordb").close(); + mSemFree->release(); + break; + } QPair cur = mDataQueue->dequeue(); if(cur.second == SmDirWatcher::Populate){ SmTreeItem *i = populate(cur.first); @@ -123,6 +138,7 @@ void SmDataColletor::run(){ emit newData(fd, cur.second); mSemFree->release(); } + quit(); } SmTreeItem * SmDataColletor::populate(const QString &dir){ -- cgit v1.2.3-70-g09d2