From 333bbbf8d87ab749e7bbc5453031e3d8741b2160 Mon Sep 17 00:00:00 2001 From: Spencer Russell Date: Wed, 23 Mar 2016 17:55:03 -0400 Subject: [PATCH] forwards InterruptException to waiters instead of killing audio task --- src/PortAudio.jl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/PortAudio.jl b/src/PortAudio.jl index 69d6ffb..1326b26 100644 --- a/src/PortAudio.jl +++ b/src/PortAudio.jl @@ -215,7 +215,7 @@ function SampleTypes.unsafe_write(sink::PortAudioSink, buf::SampleBuf) try while written < total donecond = wait(c) - n = min(size(sink.pabuf, 2), total-written) + n = min(size(sink.jlbuf, 1), total-written) bufstart = 1+written bufend = n+written @devec sink.jlbuf[1:n, :] = buf[bufstart:bufend, :] @@ -308,8 +308,18 @@ function audiotask{T, U}(stream::PortAudioStream{T, U}) stream.bufstate = PortAudioPending catch ex - warn("Audio Task died with exception: $ex") - Base.show_backtrace(STDOUT, catch_backtrace()) + if isa(ex, InterruptException) + for w in stream.source.waiters + notify(w, ex; error=true) + end + for w in stream.sink.waiters + notify(w, ex; error=true) + end + else + warn("Audio Task died with exception: $ex") + Base.show_backtrace(STDOUT, catch_backtrace()) + break + end end end end