summaryrefslogtreecommitdiffstats
path: root/src/OutputUHD.cpp
diff options
context:
space:
mode:
authorMatthias P. Braendli <matthias.braendli@mpb.li>2016-06-24 19:51:18 +0200
committerMatthias P. Braendli <matthias.braendli@mpb.li>2016-06-24 19:51:18 +0200
commitc93a726d8fffdca2b90aa22eed13ce58a0e8009f (patch)
treea0c39945367851b40dfd73d86508ceae3ce08acb /src/OutputUHD.cpp
parent0a89de68defe14fb166a0a24b59ef495113a8b9d (diff)
downloaddabmod-c93a726d8fffdca2b90aa22eed13ce58a0e8009f.tar.gz
dabmod-c93a726d8fffdca2b90aa22eed13ce58a0e8009f.tar.bz2
dabmod-c93a726d8fffdca2b90aa22eed13ce58a0e8009f.zip
Fix UHD buffering leading to out of memory
Since commit d9ef93e, UHD does not backpressure the modulator anymore. If a pipe input is used, the ODR-DabMux before also doesn't get any back-pressure, the modulation thread and the mux run a very high rate. This high rate fills the buffer between OutputUHD and its worker thread, until the out-of-memory killer kills ODR-DabMod. Less impact on ZMQ input, because that is throttled at the mux, but we still have a buffer that can grow in an uncontrolled way
Diffstat (limited to 'src/OutputUHD.cpp')
-rw-r--r--src/OutputUHD.cpp9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/OutputUHD.cpp b/src/OutputUHD.cpp
index 1b84b7c..8f988f3 100644
--- a/src/OutputUHD.cpp
+++ b/src/OutputUHD.cpp
@@ -2,7 +2,7 @@
Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Her Majesty the
Queen in Right of Canada (Communications Research Center Canada)
- Copyright (C) 2014, 2015
+ Copyright (C) 2016
Matthias P. Braendli, matthias.braendli@mpb.li
http://opendigitalradio.org
@@ -404,11 +404,8 @@ int OutputUHD::process(Buffer* dataIn, Buffer* dataOut)
}
else {
while (true) {
- if (uwd.frames.size() > FRAMES_MAX_SIZE) {
- usleep(10000); // 10ms
- }
-
- size_t num_frames = uwd.frames.push(frame);
+ size_t num_frames = uwd.frames.push_wait_if_full(frame,
+ FRAMES_MAX_SIZE);
etiLog.log(trace, "UHD,push %zu", num_frames);
break;
}