Zebediah Figura : winegstreamer/gsttffilter: Don't drop the streaming lock in Gstreamer_transform_ProcessEnd().

Alexandre Julliard julliard at winehq.org
Mon Dec 2 17:10:14 CST 2019


Module: wine
Branch: master
Commit: bdc09fb8b42c20f7f732e4e27a81121b1ab651b8
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=bdc09fb8b42c20f7f732e4e27a81121b1ab651b8

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Sat Nov 30 19:48:33 2019 -0600

winegstreamer/gsttffilter: Don't drop the streaming lock in Gstreamer_transform_ProcessEnd().

This sort of reverts 096da45036959e57ae3aa5b0de0c06f69c651788. The deadlock
mentioned there is not spelled out in detail, but likely results from the
streaming thread trying to acquire the filter lock while a main thread which
is holding the filter lock waits for the streaming thread to finish. However,
DirectShow documentation (and manual testing) suggests that the correct way
to avoid this problem is simply to never take the filter lock from the
streaming thread. Since we currently don't do this anymore, it should be safe
to reinstate this lock.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winegstreamer/gsttffilter.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/dlls/winegstreamer/gsttffilter.c b/dlls/winegstreamer/gsttffilter.c
index 9ff5f8741d..ee1851dfdc 100644
--- a/dlls/winegstreamer/gsttffilter.c
+++ b/dlls/winegstreamer/gsttffilter.c
@@ -272,9 +272,7 @@ static HRESULT WINAPI Gstreamer_transform_ProcessEnd(TransformFilter *iface)
 
     mark_wine_thread();
 
-    LeaveCriticalSection(&This->tf.csReceive);
     ret = gst_element_set_state(This->filter, GST_STATE_READY);
-    EnterCriticalSection(&This->tf.csReceive);
     TRACE("Returned: %i\n", ret);
     return S_OK;
 }




More information about the wine-cvs mailing list