summaryrefslogtreecommitdiffstats
path: root/src/output/SDR.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2018-04-20 12:29:24 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2018-04-20 12:29:24 +0200
commit411d03ac6b8ee1a8c06f952b9378c90516a715b7 (patch)
tree3236a6121eb9137a79b82699006df877e3876c32 /src/output/SDR.cpp
parent4f9b087a578fac9dffef83cdcb41573468a4ae17 (diff)
downloaddabmod-411d03ac6b8ee1a8c06f952b9378c90516a715b7.tar.gz
dabmod-411d03ac6b8ee1a8c06f952b9378c90516a715b7.tar.bz2
dabmod-411d03ac6b8ee1a8c06f952b9378c90516a715b7.zip
ThreadsafeQueue: add wakeup event instead of custom termination markers
This avoids the issue that the ~SDR termination marker doesn't reach the consumer because it's still prebuffering
Diffstat (limited to 'src/output/SDR.cpp')
-rw-r--r--src/output/SDR.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/output/SDR.cpp b/src/output/SDR.cpp
index b47433d..7c1b585 100644
--- a/src/output/SDR.cpp
+++ b/src/output/SDR.cpp
@@ -84,9 +84,7 @@ SDR::~SDR()
{
m_running.store(false);
- FrameData end_marker;
- end_marker.buf.clear();
- m_queue.push(end_marker);
+ m_queue.trigger_wakeup();
if (m_device_thread.joinable()) {
m_device_thread.join();
@@ -181,7 +179,7 @@ void SDR::process_thread_entry()
m_queue.wait_and_pop(frame, pop_prebuffering);
etiLog.log(trace, "SDR,pop");
- if (m_running.load() == false or frame.buf.empty()) {
+ if (m_running.load() == false) {
break;
}
@@ -203,8 +201,10 @@ void SDR::process_thread_entry()
}
}
}
+ catch (const ThreadsafeQueueWakeup& e) { }
catch (const runtime_error& e) {
- etiLog.level(error) << "SDR output thread caught runtime error: " << e.what();
+ etiLog.level(error) << "SDR output thread caught runtime error: " <<
+ e.what();
}
m_running.store(false);