}\r
}\r
}\r
+ }\r
\r
- if ( handle->drainCounter ) {\r
- handle->drainCounter++;\r
- goto unlock;\r
- }\r
+ // Don't bother draining input\r
+ if ( handle->drainCounter ) {\r
+ handle->drainCounter++;\r
+ goto unlock;\r
}\r
\r
AudioDeviceID inputDevice;\r
memcpy( jackbuffer, &stream_.userBuffer[0][i*bufferBytes], bufferBytes );\r
}\r
}\r
+ }\r
\r
- if ( handle->drainCounter ) {\r
- handle->drainCounter++;\r
- goto unlock;\r
- }\r
+ // Don't bother draining input\r
+ if ( handle->drainCounter ) {\r
+ handle->drainCounter++;\r
+ goto unlock;\r
}\r
\r
if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) {\r
}\r
\r
}\r
+ }\r
\r
- if ( handle->drainCounter ) {\r
- handle->drainCounter++;\r
- goto unlock;\r
- }\r
+ // Don't bother draining input\r
+ if ( handle->drainCounter ) {\r
+ handle->drainCounter++;\r
+ goto unlock;\r
}\r
\r
if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) {\r
\r
stream_.state = STREAM_STOPPED;\r
\r
+ MUTEX_LOCK( &stream_.mutex );\r
+\r
// Stop the buffer and clear memory\r
LPDIRECTSOUNDBUFFER buffer = (LPDIRECTSOUNDBUFFER) handle->buffer[0];\r
result = buffer->Stop();\r
\r
stream_.state = STREAM_STOPPED;\r
\r
+ if ( stream_.mode != DUPLEX )\r
+ MUTEX_LOCK( &stream_.mutex );\r
+\r
result = buffer->Stop();\r
if ( FAILED( result ) ) {\r
errorStream_ << "RtApiDs::stopStream: error (" << getErrorString( result ) << ") stopping input buffer!";\r
\r
unlock:\r
timeEndPeriod( 1 ); // revert to normal scheduler frequency on lesser windows.\r
+ MUTEX_UNLOCK( &stream_.mutex );\r
+\r
if ( FAILED( result ) ) error( RtAudioError::SYSTEM_ERROR );\r
}\r
\r
char *buffer;\r
long bufferBytes;\r
\r
+ MUTEX_LOCK( &stream_.mutex );\r
+ if ( stream_.state == STREAM_STOPPED ) {\r
+ MUTEX_UNLOCK( &stream_.mutex );\r
+ return;\r
+ }\r
+\r
if ( buffersRolling == false ) {\r
if ( stream_.mode == DUPLEX ) {\r
//assert( handle->dsBufferSize[0] == handle->dsBufferSize[1] );\r
}\r
nextWritePointer = ( nextWritePointer + bufferSize1 + bufferSize2 ) % dsBufferSize;\r
handle->bufferPointer[0] = nextWritePointer;\r
+ }\r
\r
- if ( handle->drainCounter ) {\r
- handle->drainCounter++;\r
- goto unlock;\r
- }\r
+ // Don't bother draining input\r
+ if ( handle->drainCounter ) {\r
+ handle->drainCounter++;\r
+ goto unlock;\r
}\r
\r
if ( stream_.mode == INPUT || stream_.mode == DUPLEX ) {\r
}\r
\r
unlock:\r
+ MUTEX_UNLOCK( &stream_.mutex );\r
RtApi::tickStreamTime();\r
}\r
\r