From cacc5dc4ba848ce1aabed425ef9f465cd9e0babb Mon Sep 17 00:00:00 2001 From: Phil Burk Date: Thu, 22 Sep 2016 09:05:38 -0700 Subject: [PATCH] pa_mac_core: use MAX(inputFrames,outputFrames) Double-check whether the stream does ouput before draining the buffer. --- src/hostapi/coreaudio/pa_mac_core.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/hostapi/coreaudio/pa_mac_core.c b/src/hostapi/coreaudio/pa_mac_core.c index beb6bae..3fba82a 100644 --- a/src/hostapi/coreaudio/pa_mac_core.c +++ b/src/hostapi/coreaudio/pa_mac_core.c @@ -2786,13 +2786,17 @@ static PaError StopStream( PaStream *s ) PaMacCoreStream *stream = (PaMacCoreStream*)s; VVDBUG(("StopStream()\n")); - // Tell WriteStream to stop filling the buffer while we are waiting for it to drain. + /* Tell WriteStream to stop filling the buffer. */ stream->state = STOPPING; - VDBUG( ("Waiting for BLIO.\n") ); - paErr = waitUntilBlioWriteBufferIsEmpty( &stream->blio, stream->sampleRate, stream->outputFramesPerBuffer ); - VDBUG( ( "waitUntilBlioWriteBufferIsEmpty returned %d\n", paErr ) ); - + if (stream->userOutChan > 0) /* Does this stream do output? */ + { + size_t maxHostFrames = MAX(stream->inputFramesPerBuffer, stream->outputFramesPerBuffer) + VDBUG( ("Waiting for write buffer to be drained.\n") ); + paErr = waitUntilBlioWriteBufferIsEmpty( &stream->blio, stream->sampleRate, + maxHostFrames); + VDBUG( ( "waitUntilBlioWriteBufferIsEmpty returned %d\n", paErr ) ); + } return FinishStoppingStream( stream ); } -- 2.43.0