From: Zebediah Figura Subject: [PATCH 1/4] winegstreamer: Avoid using the same event for multiple purposes. Message-Id: <1519335080-13105-1-git-send-email-z.figura12@gmail.com> Date: Thu, 22 Feb 2018 15:31:17 -0600 Signed-off-by: Zebediah Figura --- dlls/winegstreamer/gstdemux.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 0ce92a4..42c455b 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -69,7 +69,7 @@ typedef struct GSTImpl { GstBus *bus; guint64 start, nextofs, nextpullofs, stop; ALLOCATOR_PROPERTIES props; - HANDLE event, changed_ofs; + HANDLE no_more_pads_event, push_event; HANDLE push_thread; } GSTImpl; @@ -519,7 +519,7 @@ static DWORD CALLBACK push_data(LPVOID iface) TRACE("Waiting..\n"); - WaitForSingleObject(This->event, INFINITE); + WaitForSingleObject(This->push_event, INFINITE); TRACE("Starting..\n"); for (;;) { @@ -1050,7 +1050,7 @@ static void no_more_pads(GstElement *decodebin, gpointer user) { GSTImpl *This = (GSTImpl*)user; TRACE("%p %p\n", This, decodebin); - SetEvent(This->event); + SetEvent(This->no_more_pads_event); } static GstAutoplugSelectResult autoplug_blacklist(GstElement *bin, GstPad *pad, GstCaps *caps, GstElementFactory *fact, gpointer user) @@ -1156,7 +1156,7 @@ static HRESULT GST_Connect(GSTInPin *pPin, IPin *pConnectPin, ALLOCATOR_PROPERTI /* Add initial pins */ This->initial = This->discont = TRUE; - ResetEvent(This->event); + ResetEvent(This->no_more_pads_event); gst_element_set_state(This->container, GST_STATE_PLAYING); ret = gst_element_get_state(This->container, NULL, NULL, -1); @@ -1166,7 +1166,7 @@ static HRESULT GST_Connect(GSTInPin *pPin, IPin *pConnectPin, ALLOCATOR_PROPERTI return E_FAIL; } - WaitForSingleObject(This->event, INFINITE); + WaitForSingleObject(This->no_more_pads_event, INFINITE); gst_pad_query_duration(This->ppPins[0]->their_src, GST_FORMAT_TIME, &duration); for (i = 0; i < This->cStreams; ++i) @@ -1259,7 +1259,8 @@ IUnknown * CALLBACK Gstreamer_Splitter_create(IUnknown *pUnkOuter, HRESULT *phr) This->cStreams = 0; This->ppPins = NULL; This->push_thread = NULL; - This->event = CreateEventW(NULL, 0, 0, NULL); + This->no_more_pads_event = CreateEventW(NULL, 0, 0, NULL); + This->push_event = CreateEventW(NULL, 0, 0, NULL); This->bus = NULL; piInput = &This->pInputPin.pin.pinInfo; @@ -1286,7 +1287,8 @@ static void GST_Destroy(GSTImpl *This) TRACE("Destroying %p\n", This); - CloseHandle(This->event); + CloseHandle(This->no_more_pads_event); + CloseHandle(This->push_event); /* Don't need to clean up output pins, disconnecting input pin will do that */ IPin_ConnectedTo((IPin *)&This->pInputPin, &connected); @@ -1994,6 +1996,7 @@ static HRESULT WINAPI GSTInPin_ReceiveConnection(IPin *iface, IPin *pReceivePin, This->pReader = NULL; This->pAlloc = NULL; + ResetEvent(((GSTImpl *)This->pin.pinInfo.pFilter)->push_event); if (SUCCEEDED(hr)) hr = IPin_QueryInterface(pReceivePin, &IID_IAsyncReader, (LPVOID *)&This->pReader); if (SUCCEEDED(hr)) @@ -2016,7 +2019,7 @@ static HRESULT WINAPI GSTInPin_ReceiveConnection(IPin *iface, IPin *pReceivePin, This->pin.pConnectedTo = pReceivePin; IPin_AddRef(pReceivePin); hr = IMemAllocator_Commit(This->pAlloc); - SetEvent(((GSTImpl*)This->pin.pinInfo.pFilter)->event); + SetEvent(((GSTImpl*)This->pin.pinInfo.pFilter)->push_event); } else { GST_RemoveOutputPins((GSTImpl *)This->pin.pinInfo.pFilter); if (This->pReader) -- 2.7.4