diff --git a/RTCP/IONProc/src/ION_main.cc b/RTCP/IONProc/src/ION_main.cc index c74a9781c65a6fb217a93270313dd3cae1591962..4fc72d854870c0610c766fa7d6ddc44c6c754511 100644 --- a/RTCP/IONProc/src/ION_main.cc +++ b/RTCP/IONProc/src/ION_main.cc @@ -461,7 +461,7 @@ void *master_thread(void *) exit(1); } - LOG_DEBUG("lofar__fini: output thread joined"); + LOG_DEBUG("lofar__fini: output section joined"); } #if defined FLAT_MEMORY diff --git a/RTCP/IONProc/src/OutputThread.cc b/RTCP/IONProc/src/OutputThread.cc index c20cd2d15fd81db165b9fa0daedc680231bb7d12..65c54f66e8d8219c9b0721a7eb9e2538e31b1d1b 100644 --- a/RTCP/IONProc/src/OutputThread.cc +++ b/RTCP/IONProc/src/OutputThread.cc @@ -103,28 +103,35 @@ void OutputThread::mainLoop() doNotRunOnCore0(); #endif + // set the maximum number of concurrent writers static Semaphore semaphore(1); while ((o = itsSendQueueActivity.remove()) >= 0) { struct OutputThread::SingleOutput &output = itsOutputs[o]; + std::cout << "OutputThread: pop queue " << o << std::endl; data = output.sendQueue.remove(); + std::cout << "OutputThread: lower semaphore " << std::endl; + semaphore.down(); + try { - semaphore.down(); + std::cout << "OutputThread: write data for queue " << o << std::endl; // write header: nr of output itsStreamToStorage->write( &o, sizeof o ); // write data, including serial nr data->write(itsStreamToStorage, true); - - semaphore.up(); - output.freeQueue.append(data); } catch (...) { + semaphore.up(); output.freeQueue.append(data); throw; } + + std::cout << "OutputThread: raise semaphore and wait for next element " << std::endl; + semaphore.up(); + output.freeQueue.append(data); } }