On 7/26/22 03:04, RĂ©mi Bernon wrote:
+static DWORD WINAPI stream_thread(void *arg) +{
- struct async_reader *reader = arg;
- IWMReaderCallback *callback = reader->callback;
- IWMReaderCallbackAdvanced *callback_advanced;
- HRESULT hr = S_OK;
- EnterCriticalSection(&reader->stream_cs);
- if (FAILED(hr = IWMReaderCallback_QueryInterface(callback,
&IID_IWMReaderCallbackAdvanced, (void **)&callback_advanced)))
callback_advanced = NULL;
- TRACE("Querying for IWMReaderCallbackAdvanced returned %#lx.\n", hr);
- while (reader->state != STATE_CLOSED || reader->next_state)
- {
execute_state_transition(reader);
if (reader->state == STATE_RUNNING)
{
stream_thread_running(reader, callback_advanced);
if (!reader->next_state)
reader->state = STATE_STOPPED;
}
while (reader->state != STATE_CLOSED && !reader->next_state)
SleepConditionVariableCS(&reader->stream_cv, &reader->stream_cs, INFINITE);
- }
It's not a huge deal, since stream_thread_running() already does this, but do you think you could write this in a way that doesn't need a nested loop?