diff --git a/src/detsim.cpp b/src/detsim.cpp
index dd8e95f5414b9a42a06e01c30e71fa9194073918..8c784212d359fd7780cf96cd5b0e9a97118e66f1 100644
--- a/src/detsim.cpp
+++ b/src/detsim.cpp
@@ -38,9 +38,9 @@ void worker(const std::string& dataHandlerName,
 		timed::anchor idleAnchor("idle");
 		timed::anchor burstAnchor("burst");
 		timed::anchor waitAnchor("wait");
-		nArmed++;
 		{
 			std::unique_lock<decltype(syncMutexToMain)> lock(syncMutexToMain);
+			nArmed++;
 			syncCvToMain.notify_one();
 		}
 		{
@@ -92,6 +92,7 @@ void worker(const std::string& dataHandlerName,
 		waitAnchor.write(outputDir, threadNo);
 		outputHandler->write(outputDir, threadNo);
 	} catch  (const std::exception& e) {
+		std::unique_lock<decltype(syncMutexToMain)> lock(syncMutexToMain);
 		nArmed++;
 		syncCvToMain.notify_one();
 		std::cerr << "Oops: " << e.what() << "\n";
@@ -136,6 +137,9 @@ int main(int argc, const char*argv[]) {
 		while (nArmed < nThreads) {
 			syncCvToMain.wait(lock);
 		}
+	}
+	{
+		std::unique_lock<decltype(syncMutexToWorker)> lock(syncMutexToWorker);
 		syncCvToWorker.notify_all();
 	}
 	auto firstThreadStart = std::chrono::system_clock::now();