summaryrefslogtreecommitdiffstats
path: root/smdirwatcher.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2013-07-27 07:18:32 +0200
committerArno <am@disconnect.de>2013-07-27 07:18:32 +0200
commit1b1d3a18a8fffdd61f533fd4b0bde4f75d683212 (patch)
tree51b60f6afbe4a5e1bd8617a7c18f08a30e971526 /smdirwatcher.cpp
parent8fba0fcb81e7b517804f34a5c8ad3741f92926da (diff)
downloadSheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.tar.gz
SheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.tar.bz2
SheMov-1b1d3a18a8fffdd61f533fd4b0bde4f75d683212.zip
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...
Diffstat (limited to 'smdirwatcher.cpp')
-rw-r--r--smdirwatcher.cpp18
1 files changed, 17 insertions, 1 deletions
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<QString, SmDirWatcher::DWEvent> 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){