// 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;
stream->out.clientProc = stream->out.clientParent;
// Signal: stream running.
- InterlockedExchange(&stream->running, TRUE);
+ stream->running = TRUE;
}
return result;
// Cleanup handles
_StreamCleanup(stream);
- // Notify: not running
- InterlockedExchange(&stream->running, FALSE);
+ stream->running = FALSE;
}
// ------------------------------------------------------------------------------------------
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 )
{
// ------------------------------------------------------------------------------------------
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;
}
// ------------------------------------------------------------------------------------------
ThreadIdleScheduler sched;
// validate
- if (!_IsStreamRunning(stream))
+ if (!stream->running)
return paStreamIsStopped;
if (stream->captureClient == NULL)
return paBadStreamPtr;
ThreadIdleScheduler sched;
// validate
- if (!_IsStreamRunning(stream))
+ if (!stream->running)
return paStreamIsStopped;
if (stream->renderClient == NULL)
return paBadStreamPtr;
UINT32 available = 0;
// validate
- if (!_IsStreamRunning(stream))
+ if (!stream->running)
return paStreamIsStopped;
if (stream->captureClient == NULL)
return paBadStreamPtr;
UINT32 available = 0;
// validate
- if (!_IsStreamRunning(stream))
+ if (!stream->running)
return paStreamIsStopped;
if (stream->renderClient == NULL)
return paBadStreamPtr;
}
// Signal: stream running
- InterlockedExchange(&stream->running, TRUE);
+ stream->running = TRUE;
// Notify: thread started
SetEvent(stream->hThreadStart);
CoUninitialize();
// Notify: not running
- InterlockedExchange(&stream->running, FALSE);
+ stream->running = FALSE;
// Notify: thread exited
SetEvent(stream->hThreadExit);
}
// Signal: stream running
- InterlockedExchange(&stream->running, TRUE);
+ stream->running = TRUE;
// Notify: thread started
SetEvent(stream->hThreadStart);
CoUninitialize();
// Notify: not running
- InterlockedExchange(&stream->running, FALSE);
+ stream->running = FALSE;
// Notify: thread exited
SetEvent(stream->hThreadExit);