[PATCH v2 0/1] MR3491: winegstreamer: Leave media source critical section before unlocking workqueue.
Today, if media_source_Shutdown is called around the same time as a work item is put on the async_commands_queue, we end up in a deadlock if Shutdown enters media source's cs first, as it waits for the queue's callback to finish, which, in turn, waits for the object's cs to be released. To avoid this leave the cs, before unlocking the workqueue, to let any callback on the queue finish running. Signed-off-by: Bernhard Kölbl <bkoelbl(a)codeweavers.com> Blocks !3351 -- v2: winegstreamer: Leave media source critical section before unlocking workqueue. https://gitlab.winehq.org/wine/wine/-/merge_requests/3491
From: Bernhard Kölbl <bkoelbl(a)codeweavers.com> Today, if media_source_Shutdown is called around the same time as a work item is put on the async_commands_queue, we end up in a deadlock if Shutdown enters media source's cs first, as it waits for the queue's callback to finish, which, in turn, waits for the object's cs to be released. To avoid this leave the cs, before unlocking the workqueue, to let any callback on the queue finish running. Signed-off-by: Bernhard Kölbl <bkoelbl(a)codeweavers.com> --- dlls/winegstreamer/media_source.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c index e1e64fc7f98..64bdd5ec871 100644 --- a/dlls/winegstreamer/media_source.c +++ b/dlls/winegstreamer/media_source.c @@ -1570,10 +1570,10 @@ static HRESULT WINAPI media_source_Shutdown(IMFMediaSource *iface) free(source->descriptors); free(source->streams); - MFUnlockWorkQueue(source->async_commands_queue); - LeaveCriticalSection(&source->cs); + MFUnlockWorkQueue(source->async_commands_queue); + return S_OK; } -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/3491
This merge request was approved by Rémi Bernon. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/3491
participants (2)
-
Bernhard Kölbl -
Rémi Bernon