Commit 1 prevents the media session from starting execution of an asynchronous operation while another asynchronous operation is still running. Without this, it was possible for invalid state transitions to happen, which could leave the session in an intermediary state (not stopped, started, paused, closed or shut down) indefinitely.
Commits 2, 3 and 4 are some more fixes around pausing and unpausing in mfplat.
From: Torge Matthies openglfreak@googlemail.com
--- dlls/mf/session.c | 84 +++++++++++++++++++++++++++++++---------------- 1 file changed, 55 insertions(+), 29 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 3c989249229..5c5fc0c625d 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -219,6 +219,7 @@ enum presentation_flags SESSION_FLAG_END_OF_PRESENTATION = 0x10, SESSION_FLAG_PENDING_RATE_CHANGE = 0x20, SESSION_FLAG_PENDING_COMMAND = 0x40, + SESSION_FLAG_QUEUED_COMMAND = 0x80, };
struct media_session @@ -454,6 +455,33 @@ static HRESULT session_is_shut_down(struct media_session *session) return session->state == SESSION_STATE_SHUT_DOWN ? MF_E_SHUTDOWN : S_OK; }
+static void session_schedule_command(struct media_session *session) +{ + struct session_op *op; + struct list *e; + + if (session->presentation.flags & (SESSION_FLAG_PENDING_COMMAND | SESSION_FLAG_QUEUED_COMMAND)) + { + TRACE("not queueing: flags %x\n", session->presentation.flags); + return; + } + + if (session->state != SESSION_STATE_STOPPED && session->state != SESSION_STATE_STARTED && + session->state != SESSION_STATE_PAUSED && session->state != SESSION_STATE_CLOSED && + session->state != SESSION_STATE_SHUT_DOWN) + { + TRACE("not queueing: state %x\n", session->state); + return; + } + + if ((e = list_head(&session->commands))) + { + op = LIST_ENTRY(e, struct session_op, entry); + MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_STANDARD, &session->commands_callback, &op->IUnknown_iface); + session->presentation.flags |= SESSION_FLAG_QUEUED_COMMAND; + } +} + static HRESULT session_submit_command(struct media_session *session, struct session_op *op) { HRESULT hr; @@ -463,13 +491,12 @@ static HRESULT session_submit_command(struct media_session *session, struct sess EnterCriticalSection(&session->cs); if (SUCCEEDED(hr = session_is_shut_down(session))) { - if (list_empty(&session->commands) && !(session->presentation.flags & SESSION_FLAG_PENDING_COMMAND)) - hr = MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_STANDARD, &session->commands_callback, &op->IUnknown_iface); if (op->command == SESSION_CMD_SHUTDOWN) list_add_head(&session->commands, &op->entry); else list_add_tail(&session->commands, &op->entry); IUnknown_AddRef(&op->IUnknown_iface); + session_schedule_command(session); } LeaveCriticalSection(&session->cs);
@@ -946,17 +973,9 @@ static struct topo_node *session_get_topo_node_output(const struct media_session
static void session_command_complete(struct media_session *session) { - struct session_op *op; - struct list *e; - - session->presentation.flags &= ~SESSION_FLAG_PENDING_COMMAND; - + session->presentation.flags &= ~(SESSION_FLAG_PENDING_COMMAND | SESSION_FLAG_QUEUED_COMMAND); /* Submit next command. */ - if ((e = list_head(&session->commands))) - { - op = LIST_ENTRY(e, struct session_op, entry); - MFPutWorkItem(MFASYNC_CALLBACK_QUEUE_STANDARD, &session->commands_callback, &op->IUnknown_iface); - } + session_schedule_command(session); }
static void session_command_complete_with_event(struct media_session *session, MediaEventType event, @@ -1001,6 +1020,13 @@ static void session_flush_nodes(struct media_session *session) } }
+static void session_set_state(struct media_session *session, enum session_state new_state) +{ + TRACE("setting state to %d\n", new_state); + session->state = new_state; + session_schedule_command(session); +} + static void session_start(struct media_session *session, const GUID *time_format, const PROPVARIANT *start_position) { struct media_source *source; @@ -1055,7 +1081,7 @@ static void session_start(struct media_session *session, const GUID *time_format } }
- session->state = SESSION_STATE_STARTING_SOURCES; + session_set_state(session, SESSION_STATE_STARTING_SOURCES); break; case SESSION_STATE_STARTED: /* Check for invalid positions */ @@ -1087,7 +1113,7 @@ static void session_start(struct media_session *session, const GUID *time_format PropVariantCopy(&session->presentation.start_position, start_position);
/* SESSION_STATE_STARTED -> SESSION_STATE_RESTARTING_SOURCES -> SESSION_STATE_STARTED */ - session->state = SESSION_STATE_RESTARTING_SOURCES; + session_set_state(session, SESSION_STATE_RESTARTING_SOURCES); break; default: session_command_complete_with_event(session, MESessionStarted, MF_E_INVALIDREQUEST, NULL); @@ -1102,7 +1128,7 @@ static void session_set_started(struct media_session *session) unsigned int caps; DWORD flags;
- session->state = SESSION_STATE_STARTED; + session_set_state(session, SESSION_STATE_STARTED);
caps = session->caps | MFSESSIONCAP_PAUSE;
@@ -1134,7 +1160,7 @@ static void session_set_paused(struct media_session *session, unsigned int state /* Failed event status could indicate a failure during normal transition to paused state, or an attempt to pause from invalid initial state. To finalize failed transition in the former case, state is still forced to PAUSED, otherwise previous state is retained. */ - if (state != ~0u) session->state = state; + if (state != ~0u) session_set_state(session, state); if (SUCCEEDED(status)) session_set_caps(session, session->caps & ~MFSESSIONCAP_PAUSE); session_command_complete_with_event(session, MESessionPaused, status, NULL); @@ -1142,7 +1168,7 @@ static void session_set_paused(struct media_session *session, unsigned int state
static void session_set_closed(struct media_session *session, HRESULT status) { - session->state = SESSION_STATE_CLOSED; + session_set_state(session, SESSION_STATE_CLOSED); if (SUCCEEDED(status)) session_set_caps(session, session->caps & ~(MFSESSIONCAP_START | MFSESSIONCAP_SEEK)); session_command_complete_with_event(session, MESessionClosed, status, NULL); @@ -1159,7 +1185,7 @@ static void session_pause(struct media_session *session)
/* Transition in two steps - pause the clock, wait for sinks, then pause sources. */ if (SUCCEEDED(hr = IMFPresentationClock_Pause(session->clock))) - session->state = SESSION_STATE_PAUSING_SINKS; + session_set_state(session, SESSION_STATE_PAUSING_SINKS); state = SESSION_STATE_PAUSED;
break; @@ -1197,7 +1223,7 @@ static void session_set_stopped(struct media_session *session, HRESULT status) MediaEventType event_type; IMFMediaEvent *event;
- session->state = SESSION_STATE_STOPPED; + session_set_state(session, SESSION_STATE_STOPPED); event_type = session->presentation.flags & SESSION_FLAG_END_OF_PRESENTATION ? MESessionEnded : MESessionStopped;
if (SUCCEEDED(MFCreateMediaEvent(event_type, &GUID_NULL, status, NULL, &event))) @@ -1222,7 +1248,7 @@ static void session_stop(struct media_session *session) /* Transition in two steps - stop the clock, wait for sinks, then stop sources. */ IMFPresentationClock_GetTime(session->clock, &session->presentation.clock_stop_time); if (SUCCEEDED(hr = IMFPresentationClock_Stop(session->clock))) - session->state = SESSION_STATE_STOPPING_SINKS; + session_set_state(session, SESSION_STATE_STOPPING_SINKS); else session_set_stopped(session, hr);
@@ -1244,7 +1270,7 @@ static HRESULT session_finalize_sinks(struct media_session *session) HRESULT hr = S_OK;
session->presentation.flags &= ~SESSION_FLAG_FINALIZE_SINKS; - session->state = SESSION_STATE_FINALIZING_SINKS; + session_set_state(session, SESSION_STATE_FINALIZING_SINKS);
LIST_FOR_EACH_ENTRY(sink, &session->presentation.sinks, struct media_sink, entry) { @@ -1281,7 +1307,7 @@ static void session_close(struct media_session *session) case SESSION_STATE_PAUSED: session->presentation.flags |= SESSION_FLAG_FINALIZE_SINKS; if (SUCCEEDED(hr = IMFPresentationClock_Stop(session->clock))) - session->state = SESSION_STATE_STOPPING_SINKS; + session_set_state(session, SESSION_STATE_STOPPING_SINKS); break; default: hr = MF_E_INVALIDREQUEST; @@ -2390,7 +2416,7 @@ static HRESULT WINAPI mfsession_Shutdown(IMFMediaSession *iface) EnterCriticalSection(&session->cs); if (SUCCEEDED(hr = session_is_shut_down(session))) { - session->state = SESSION_STATE_SHUT_DOWN; + session_set_state(session, SESSION_STATE_SHUT_DOWN); IMFMediaEventQueue_Shutdown(session->event_queue); if (session->quality_manager) IMFQualityManager_Shutdown(session->quality_manager); @@ -3102,10 +3128,10 @@ static void session_set_source_object_state(struct media_session *session, IUnkn } } } - session->state = SESSION_STATE_PREROLLING_SINKS; + session_set_state(session, SESSION_STATE_PREROLLING_SINKS); } else if (SUCCEEDED(session_start_clock(session))) - session->state = SESSION_STATE_STARTING_SINKS; + session_set_state(session, SESSION_STATE_STARTING_SINKS);
break; case SESSION_STATE_RESTARTING_SOURCES: @@ -3125,7 +3151,7 @@ static void session_set_source_object_state(struct media_session *session, IUnkn return; } } - session->state = SESSION_STATE_STARTING_SOURCES; + session_set_state(session, SESSION_STATE_STARTING_SOURCES); break; case SESSION_STATE_PAUSING_SOURCES: if (!session_is_source_nodes_state(session, OBJ_STATE_PAUSED)) @@ -3172,7 +3198,7 @@ static void session_set_sink_stream_state(struct media_session *session, IMFStre break;
if (SUCCEEDED(session_start_clock(session))) - session->state = SESSION_STATE_STARTING_SINKS; + session_set_state(session, SESSION_STATE_STARTING_SINKS); break; case SESSION_STATE_STARTING_SINKS: if (!session_is_output_nodes_state(session, OBJ_STATE_STARTED)) @@ -3184,7 +3210,7 @@ static void session_set_sink_stream_state(struct media_session *session, IMFStre if (!session_is_output_nodes_state(session, OBJ_STATE_PAUSED)) break;
- session->state = SESSION_STATE_PAUSING_SOURCES; + session_set_state(session, SESSION_STATE_PAUSING_SOURCES);
LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) { @@ -3200,7 +3226,7 @@ static void session_set_sink_stream_state(struct media_session *session, IMFStre if (!session_is_output_nodes_state(session, OBJ_STATE_STOPPED)) break;
- session->state = SESSION_STATE_STOPPING_SOURCES; + session_set_state(session, SESSION_STATE_STOPPING_SOURCES);
LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) {
From: Torge Matthies openglfreak@googlemail.com
--- dlls/mf/sar.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/mf/sar.c b/dlls/mf/sar.c index 84824f954dd..4adbc28a39d 100644 --- a/dlls/mf/sar.c +++ b/dlls/mf/sar.c @@ -636,7 +636,7 @@ static HRESULT WINAPI audio_renderer_clock_sink_OnClockStart(IMFClockStateSink * EnterCriticalSection(&renderer->cs); if (renderer->audio_client) { - if (renderer->state == STREAM_STATE_STOPPED) + if (renderer->state == STREAM_STATE_PAUSED || renderer->state == STREAM_STATE_STOPPED) { if (FAILED(hr = IAudioClient_Start(renderer->audio_client))) WARN("Failed to start audio client, hr %#lx.\n", hr);
From: Torge Matthies openglfreak@googlemail.com
This is needed by video_frame_sink in mfmediaengine to properly restart playback after pausing if the unpausing operation is a seek. --- dlls/winegstreamer/media_source.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index 030d0c1b9a2..6e02dc9a723 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -658,7 +658,7 @@ static HRESULT media_source_start(struct media_source *source, IMFPresentationDe AM_SEEKING_AbsolutePositioning, AM_SEEKING_NoPositioning);
for (i = 0; i < source->stream_count; i++) - flush_token_queue(source->streams[i], position->vt == VT_EMPTY); + flush_token_queue(source->streams[i], TRUE);
return IMFMediaEventQueue_QueueEventParamVar(source->event_queue, seek_message ? MESourceSeeked : MESourceStarted, &GUID_NULL, S_OK, position);
From: Torge Matthies openglfreak@googlemail.com
--- dlls/mf/session.c | 133 +++++++++++++++++++++++++++------------------- 1 file changed, 79 insertions(+), 54 deletions(-)
diff --git a/dlls/mf/session.c b/dlls/mf/session.c index 5c5fc0c625d..361bebecc3a 100644 --- a/dlls/mf/session.c +++ b/dlls/mf/session.c @@ -261,6 +261,7 @@ struct media_session struct list commands; enum session_state state; DWORD caps; + BOOL buffering; CRITICAL_SECTION cs; };
@@ -1174,6 +1175,38 @@ static void session_set_closed(struct media_session *session, HRESULT status) session_command_complete_with_event(session, MESessionClosed, status, NULL); }
+static BOOL session_is_output_nodes_state(struct media_session *session, enum object_state state) +{ + struct topo_node *node; + + LIST_FOR_EACH_ENTRY(node, &session->presentation.nodes, struct topo_node, entry) + { + if (node->type == MF_TOPOLOGY_OUTPUT_NODE && node->state != state) + return FALSE; + } + + return TRUE; +} + +static HRESULT session_pause_sources(struct media_session *session) +{ + struct media_source *source; + HRESULT hr; + + if (!session_is_output_nodes_state(session, OBJ_STATE_PAUSED)) + return S_OK; + + session_set_state(session, SESSION_STATE_PAUSING_SOURCES); + + LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) + { + if (FAILED(hr = IMFMediaSource_Pause(source->source))) + return hr; + } + + return S_OK; +} + static void session_pause(struct media_session *session) { unsigned int state = ~0u; @@ -1184,7 +1217,12 @@ static void session_pause(struct media_session *session) case SESSION_STATE_STARTED:
/* Transition in two steps - pause the clock, wait for sinks, then pause sources. */ - if (SUCCEEDED(hr = IMFPresentationClock_Pause(session->clock))) + if (session->buffering) + { + session_set_state(session, SESSION_STATE_PAUSING_SINKS); + hr = session_pause_sources(session); + } + else if (SUCCEEDED(hr = IMFPresentationClock_Pause(session->clock))) session_set_state(session, SESSION_STATE_PAUSING_SINKS); state = SESSION_STATE_PAUSED;
@@ -1236,6 +1274,28 @@ static void session_set_stopped(struct media_session *session, HRESULT status) session_command_complete(session); }
+static void session_stop_sources(struct media_session *session) +{ + struct media_source *source; + HRESULT hr = S_OK; + + if (!session_is_output_nodes_state(session, OBJ_STATE_STOPPED)) + return; + + session_set_state(session, SESSION_STATE_STOPPING_SOURCES); + + LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) + { + if (session->presentation.flags & SESSION_FLAG_END_OF_PRESENTATION) + IMFMediaSource_Stop(source->source); + else if (FAILED(hr = IMFMediaSource_Stop(source->source))) + return; + } + + if (session->presentation.flags & SESSION_FLAG_END_OF_PRESENTATION || FAILED(hr)) + session_set_stopped(session, hr); +} + static void session_stop(struct media_session *session) { HRESULT hr = MF_E_INVALIDREQUEST; @@ -1247,7 +1307,12 @@ static void session_stop(struct media_session *session)
/* Transition in two steps - stop the clock, wait for sinks, then stop sources. */ IMFPresentationClock_GetTime(session->clock, &session->presentation.clock_stop_time); - if (SUCCEEDED(hr = IMFPresentationClock_Stop(session->clock))) + if (session->buffering) + { + session_set_state(session, SESSION_STATE_STOPPING_SINKS); + session_stop_sources(session); + } + else if (SUCCEEDED(hr = IMFPresentationClock_Stop(session->clock))) session_set_state(session, SESSION_STATE_STOPPING_SINKS); else session_set_stopped(session, hr); @@ -1306,7 +1371,12 @@ static void session_close(struct media_session *session) case SESSION_STATE_STARTED: case SESSION_STATE_PAUSED: session->presentation.flags |= SESSION_FLAG_FINALIZE_SINKS; - if (SUCCEEDED(hr = IMFPresentationClock_Stop(session->clock))) + if (session->buffering) + { + session_set_state(session, SESSION_STATE_STOPPING_SINKS); + session_stop_sources(session); + } + else if (SUCCEEDED(hr = IMFPresentationClock_Stop(session->clock))) session_set_state(session, SESSION_STATE_STOPPING_SINKS); break; default: @@ -2942,19 +3012,6 @@ static BOOL session_is_source_nodes_state(struct media_session *session, enum ob return TRUE; }
-static BOOL session_is_output_nodes_state(struct media_session *session, enum object_state state) -{ - struct topo_node *node; - - LIST_FOR_EACH_ENTRY(node, &session->presentation.nodes, struct topo_node, entry) - { - if (node->type == MF_TOPOLOGY_OUTPUT_NODE && node->state != state) - return FALSE; - } - - return TRUE; -} - static enum object_state session_get_object_state_for_event(MediaEventType event) { switch (event) @@ -2999,6 +3056,8 @@ static HRESULT session_start_clock(struct media_session *session)
if (FAILED(hr = IMFPresentationClock_Start(session->clock, start_offset))) WARN("Failed to start session clock, hr %#lx.\n", hr); + else if (session->buffering) + IMFPresentationClock_Pause(session->clock);
return hr; } @@ -3180,7 +3239,6 @@ static void session_set_source_object_state(struct media_session *session, IUnkn static void session_set_sink_stream_state(struct media_session *session, IMFStreamSink *stream, MediaEventType event_type) { - struct media_source *source; enum object_state state; HRESULT hr = S_OK; BOOL changed; @@ -3207,45 +3265,11 @@ static void session_set_sink_stream_state(struct media_session *session, IMFStre session_set_started(session); break; case SESSION_STATE_PAUSING_SINKS: - if (!session_is_output_nodes_state(session, OBJ_STATE_PAUSED)) - break; - - session_set_state(session, SESSION_STATE_PAUSING_SOURCES); - - LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) - { - if (FAILED(hr = IMFMediaSource_Pause(source->source))) - break; - } - - if (FAILED(hr)) + if (FAILED(hr = session_pause_sources(session))) session_set_paused(session, SESSION_STATE_PAUSED, hr); - break; case SESSION_STATE_STOPPING_SINKS: - if (!session_is_output_nodes_state(session, OBJ_STATE_STOPPED)) - break; - - session_set_state(session, SESSION_STATE_STOPPING_SOURCES); - - LIST_FOR_EACH_ENTRY(source, &session->presentation.sources, struct media_source, entry) - { - if (session->presentation.flags & SESSION_FLAG_END_OF_PRESENTATION) - IMFMediaSource_Stop(source->source); - else if (FAILED(hr = IMFMediaSource_Stop(source->source))) - break; - } - - if (session->presentation.flags & SESSION_FLAG_END_OF_PRESENTATION) - session_set_stopped(session, hr); - else if (FAILED(hr)) - { - if (session->presentation.flags & SESSION_FLAG_FINALIZE_SINKS) - session_set_closed(session, hr); - else - session_set_stopped(session, hr); - } - + session_stop_sources(session); break; default: ; @@ -4127,8 +4151,9 @@ static HRESULT WINAPI session_events_callback_Invoke(IMFAsyncCallback *iface, IM { if (event_type == MEBufferingStarted) IMFPresentationClock_Pause(session->clock); - else + else if (session->state == SESSION_STATE_STARTING_SINKS || session->state == SESSION_STATE_STARTED) IMFPresentationClock_Start(session->clock, PRESENTATION_CURRENT_POSITION); + session->buffering = (event_type == MEBufferingStarted);
IMFMediaEventQueue_QueueEvent(session->event_queue, event); }
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=147682
Your paranoid android.
=== debian11 (32 bit report) ===
mf: mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf: Timeout
=== debian11b (64 bit WoW report) ===
mf: mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf: Timeout
These test failures look legitimate, fwiw.
Nikolay Sivov (@nsivov) commented about dlls/mf/sar.c:
EnterCriticalSection(&renderer->cs); if (renderer->audio_client) {
if (renderer->state == STREAM_STATE_STOPPED)
if (renderer->state == STREAM_STATE_PAUSED || renderer->state == STREAM_STATE_STOPPED) { if (FAILED(hr = IAudioClient_Start(renderer->audio_client))) WARN("Failed to start audio client, hr %#lx.\n", hr);
I think the idea here is that restart happens with OnClockRestart(). When is it not the case?
On Thu Aug 15 10:39:10 2024 +0000, Nikolay Sivov wrote:
I think the idea here is that restart happens with OnClockRestart(). When is it not the case?
AFAIU OnClockRestart happens when the presentation clock is unpaused without changing the position, while OnClockStart happens when it is initially started and when it is seeked (position is changed). The latter can also happen when the clock is paused.