--- a/src/qtgui/idxthread.cpp
+++ b/src/qtgui/idxthread.cpp
@@ -1,5 +1,3 @@
-#include <stdio.h>
-#include <unistd.h>
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -17,6 +15,9 @@
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
#include <qthread.h>
#include <qmutex.h>
@@ -27,6 +28,7 @@
#include "idxthread.h"
#include "smallut.h"
#include "rclinit.h"
+#include "pathut.h"
static int stopindexing;
static int startindexing;
@@ -79,16 +81,26 @@
myconf->setKeyDir("");
myconf->getConfParam("loglevel", &loglevel);
DebugLog::getdbl()->setloglevel(loglevel);
- ConfIndexer *indexer = new ConfIndexer(myconf, this);
- if (indexer->index(rezero, ConfIndexer::IxTAll)) {
- indexingstatus = IDXTS_OK;
- indexingReason = "";
+
+ Pidfile pidfile(myconf->getPidfile());
+ if (pidfile.open() != 0) {
+ indexingstatus = IDXTS_ERROR;
+ indexingReason = "Indexing failed: other process active? " +
+ pidfile.getreason();
} else {
- indexingstatus = IDXTS_ERROR;
- indexingReason = "Indexing failed: " + indexer->getReason();
+ pidfile.write_pid();
+ ConfIndexer *indexer = new ConfIndexer(myconf, this);
+ if (indexer->index(rezero, ConfIndexer::IxTAll)) {
+ indexingstatus = IDXTS_OK;
+ indexingReason = "";
+ } else {
+ indexingstatus = IDXTS_ERROR;
+ indexingReason = "Indexing failed: " + indexer->getReason();
+ }
+ pidfile.close();
+ delete indexer;
}
rezero = false;
- delete indexer;
action_mutex.lock();
}