diff options
author | David Robillard <d@drobilla.net> | 2012-11-17 21:50:35 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2012-11-17 21:50:35 +0000 |
commit | d04ce4cb7d4aa3eb72bc79c09dfe5bb025ad79f4 (patch) | |
tree | d7be2189bf19375e2c2f4631a5905047d16307a8 /src/server/Context.cpp | |
parent | e04c114e90b37ff7ed6a479205875616e6afce1f (diff) | |
download | ingen-d04ce4cb7d4aa3eb72bc79c09dfe5bb025ad79f4.tar.gz ingen-d04ce4cb7d4aa3eb72bc79c09dfe5bb025ad79f4.tar.bz2 ingen-d04ce4cb7d4aa3eb72bc79c09dfe5bb025ad79f4.zip |
Gracefully handle failure to send notifications due to buffer overrun.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@4827 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/Context.cpp')
-rw-r--r-- | src/server/Context.cpp | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/server/Context.cpp b/src/server/Context.cpp index 3b07373d..20d78c0e 100644 --- a/src/server/Context.cpp +++ b/src/server/Context.cpp @@ -53,7 +53,7 @@ Context::Context(Engine& engine, ID id) , _realtime(true) {} -void +bool Context::notify(LV2_URID key, FrameTime time, PortImpl* port, @@ -63,14 +63,16 @@ Context::notify(LV2_URID key, { const Notification n(port, time, key, size, type); if (_event_sink.write_space() < sizeof(n) + size) { - _engine.log().warn("Notification ring overflow\n"); + return false; + } + if (_event_sink.write(sizeof(n), &n) != sizeof(n)) { + _engine.log().error("Error writing header to notification ring\n"); + } else if (_event_sink.write(size, body) != size) { + _engine.log().error("Error writing body to notification ring\n"); } else { - if (_event_sink.write(sizeof(n), &n) != sizeof(n)) { - _engine.log().error("Error writing header to notification ring\n"); - } else if (_event_sink.write(size, body) != size) { - _engine.log().error("Error writing body to notification ring\n"); - } + return true; } + return false; } void |