]> Repos - portaudio/commitdiff
wasapi: reverted the usage of Interlocked APIs for PaWasapiStream::running
authordmitrykos <dmitrykos@neutroncode.com>
Fri, 26 Aug 2016 06:43:50 +0000 (09:43 +0300)
committerdmitrykos <dmitrykos@neutroncode.com>
Fri, 26 Aug 2016 06:43:50 +0000 (09:43 +0300)
src/hostapi/wasapi/pa_win_wasapi.c

index 367b87d071e1de5c51ed05a7c3ebe96fae301ed2..be3115a2cb26f6b5968e32a85fbd37f6d95c1c38 100644 (file)
@@ -543,7 +543,7 @@ typedef struct PaWasapiStream
 
        // must be volatile to avoid race condition on user query while
        // thread is being started
-    volatile LONG running;
+    volatile BOOL running;
 
     PA_THREAD_ID dwThreadId;
     HANDLE hThread;
@@ -3856,7 +3856,7 @@ static PaError StartStream( PaStream *s )
                stream->out.clientProc = stream->out.clientParent;
 
                // Signal: stream running.
-               InterlockedExchange(&stream->running, TRUE);
+               stream->running = TRUE;
        }
 
     return result;
@@ -3898,8 +3898,7 @@ void _StreamFinish(PaWasapiStream *stream)
        // Cleanup handles
        _StreamCleanup(stream);
 
-       // Notify: not running
-    InterlockedExchange(&stream->running, FALSE);
+    stream->running = FALSE;
 }
 
 // ------------------------------------------------------------------------------------------
@@ -3914,18 +3913,6 @@ void _StreamCleanup(PaWasapiStream *stream)
        SAFE_CLOSE(stream->hBlockingOpStreamWR);
 }
 
-// ------------------------------------------------------------------------------------------
-static BOOL _IsStreamRunning(PaWasapiStream *stream)
-{
-       LONG retv;
-       do 
-       {
-               retv = stream->running;
-       } 
-       while (InterlockedCompareExchange(&stream->running, FALSE, FALSE) != retv);
-       return retv;
-}
-
 // ------------------------------------------------------------------------------------------
 static PaError StopStream( PaStream *s )
 {
@@ -3945,13 +3932,13 @@ static PaError AbortStream( PaStream *s )
 // ------------------------------------------------------------------------------------------
 static PaError IsStreamStopped( PaStream *s )
 {
-       return !_IsStreamRunning((PaWasapiStream *)s);
+       return !((PaWasapiStream *)s)->running;
 }
 
 // ------------------------------------------------------------------------------------------
 static PaError IsStreamActive( PaStream *s )
 {
-    return _IsStreamRunning((PaWasapiStream *)s);
+    return ((PaWasapiStream *)s)->running;
 }
 
 // ------------------------------------------------------------------------------------------
@@ -3985,7 +3972,7 @@ static PaError ReadStream( PaStream* s, void *_buffer, unsigned long frames )
        ThreadIdleScheduler sched;
 
        // validate
-       if (!_IsStreamRunning(stream))
+       if (!stream->running)
                return paStreamIsStopped;
        if (stream->captureClient == NULL)
                return paBadStreamPtr;
@@ -4164,7 +4151,7 @@ static PaError WriteStream( PaStream* s, const void *_buffer, unsigned long fram
        ThreadIdleScheduler sched;
 
        // validate
-       if (!_IsStreamRunning(stream))
+       if (!stream->running)
                return paStreamIsStopped;
        if (stream->renderClient == NULL)
                return paBadStreamPtr;
@@ -4278,7 +4265,7 @@ static signed long GetStreamReadAvailable( PaStream* s )
        UINT32  available = 0;
 
        // validate
-       if (!_IsStreamRunning(stream))
+       if (!stream->running)
                return paStreamIsStopped;
        if (stream->captureClient == NULL)
                return paBadStreamPtr;
@@ -4304,7 +4291,7 @@ static signed long GetStreamWriteAvailable( PaStream* s )
        UINT32  available = 0;
 
        // validate
-       if (!_IsStreamRunning(stream))
+       if (!stream->running)
                return paStreamIsStopped;
        if (stream->renderClient == NULL)
                return paBadStreamPtr;
@@ -5094,7 +5081,7 @@ PA_THREAD_FUNC ProcThreadEvent(void *param)
        }
 
        // Signal: stream running
-       InterlockedExchange(&stream->running, TRUE);
+       stream->running = TRUE;
 
        // Notify: thread started
        SetEvent(stream->hThreadStart);
@@ -5161,7 +5148,7 @@ thread_end:
                CoUninitialize();
 
        // Notify: not running
-       InterlockedExchange(&stream->running, FALSE);
+       stream->running = FALSE;
 
        // Notify: thread exited
        SetEvent(stream->hThreadExit);
@@ -5328,7 +5315,7 @@ PA_THREAD_FUNC ProcThreadPoll(void *param)
        }
 
        // Signal: stream running
-       InterlockedExchange(&stream->running, TRUE);
+       stream->running = TRUE;
 
        // Notify: thread started
        SetEvent(stream->hThreadStart);
@@ -5683,7 +5670,7 @@ thread_end:
                CoUninitialize();
 
        // Notify: not running
-       InterlockedExchange(&stream->running, FALSE);
+       stream->running = FALSE;
 
        // Notify: thread exited
        SetEvent(stream->hThreadExit);