[PATCH 5/5] strmbase: Get rid of the "pCritSec" member of BasePin.

Zebediah Figura z.figura12 at gmail.com
Thu Sep 5 19:02:16 CDT 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/quartz/dsoundrender.c      |  4 +--
 dlls/quartz/parser.c            | 20 ++++++-------
 dlls/quartz/pin.c               | 49 ++++++++++++++++----------------
 dlls/strmbase/pin.c             | 50 ++++++++++++++++-----------------
 dlls/strmbase/renderer.c        |  8 +++---
 dlls/winegstreamer/gstdemux.c   | 14 ++++-----
 dlls/wineqtdecoder/qtsplitter.c | 18 ++++++------
 include/wine/strmbase.h         |  1 -
 8 files changed, 78 insertions(+), 86 deletions(-)

diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index 3478f95f513..29b6492adb9 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -505,9 +505,9 @@ static HRESULT WINAPI DSoundRender_BreakConnect(BaseRenderer* iface)
 
     if (This->threadid) {
         PostThreadMessageW(This->threadid, WM_APP, 0, 0);
-        LeaveCriticalSection(This->renderer.sink.pin.pCritSec);
+        LeaveCriticalSection(&This->renderer.filter.csFilter);
         WaitForSingleObject(This->advisethread, INFINITE);
-        EnterCriticalSection(This->renderer.sink.pin.pCritSec);
+        EnterCriticalSection(&This->renderer.filter.csFilter);
         CloseHandle(This->advisethread);
     }
     if (This->dsbuffer)
diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c
index 309f26fb9ee..5b09f70758c 100644
--- a/dlls/quartz/parser.c
+++ b/dlls/quartz/parser.c
@@ -552,9 +552,9 @@ static HRESULT WINAPI Parser_OutputPin_Connect(IPin * iface, IPin * pReceivePin,
     ParserImpl *parser = impl_from_IBaseFilter(&This->pin.pin.filter->IBaseFilter_iface);
 
     /* Set the allocator to our input pin's */
-    EnterCriticalSection(This->pin.pin.pCritSec);
+    EnterCriticalSection(&parser->filter.csFilter);
     This->alloc = parser->pInputPin->pAlloc;
-    LeaveCriticalSection(This->pin.pin.pCritSec);
+    LeaveCriticalSection(&parser->filter.csFilter);
 
     return BaseOutputPinImpl_Connect(iface, pReceivePin, pmt);
 }
@@ -623,22 +623,22 @@ static HRESULT WINAPI Parser_PullPin_Disconnect(IPin * iface)
     TRACE("()\n");
 
     EnterCriticalSection(&This->thread_lock);
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         if (This->pin.pConnectedTo)
         {
             FILTER_STATE state;
             ParserImpl *Parser = impl_from_IBaseFilter(&This->pin.filter->IBaseFilter_iface);
 
-            LeaveCriticalSection(This->pin.pCritSec);
+            LeaveCriticalSection(&This->pin.filter->csFilter);
             hr = IBaseFilter_GetState(&This->pin.filter->IBaseFilter_iface, INFINITE, &state);
-            EnterCriticalSection(This->pin.pCritSec);
+            EnterCriticalSection(&This->pin.filter->csFilter);
 
             if (SUCCEEDED(hr) && (state == State_Stopped) && SUCCEEDED(Parser->fnDisconnect(Parser)))
             {
-                LeaveCriticalSection(This->pin.pCritSec);
+                LeaveCriticalSection(&This->pin.filter->csFilter);
                 PullPin_Disconnect(iface);
-                EnterCriticalSection(This->pin.pCritSec);
+                EnterCriticalSection(&This->pin.filter->csFilter);
                 hr = Parser_RemoveOutputPins(impl_from_IBaseFilter(&This->pin.filter->IBaseFilter_iface));
             }
             else
@@ -647,7 +647,7 @@ static HRESULT WINAPI Parser_PullPin_Disconnect(IPin * iface)
         else
             hr = S_FALSE;
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
     LeaveCriticalSection(&This->thread_lock);
 
     return hr;
@@ -664,9 +664,9 @@ static HRESULT WINAPI Parser_PullPin_ReceiveConnection(IPin * iface, IPin * pRec
     {
         BasePin *This = (BasePin *)iface;
 
-        EnterCriticalSection(This->pCritSec);
+        EnterCriticalSection(&This->filter->csFilter);
         Parser_RemoveOutputPins(impl_from_IBaseFilter(&This->filter->IBaseFilter_iface));
-        LeaveCriticalSection(This->pCritSec);
+        LeaveCriticalSection(&This->filter->csFilter);
     }
 
     return hr;
diff --git a/dlls/quartz/pin.c b/dlls/quartz/pin.c
index bcdd1c94735..bf31799641d 100644
--- a/dlls/quartz/pin.c
+++ b/dlls/quartz/pin.c
@@ -174,7 +174,6 @@ static HRESULT PullPin_Init(const IPinVtbl *PullPin_Vtbl, struct strmbase_filter
     /* Common attributes */
     pPinImpl->pin.IPin_iface.lpVtbl = PullPin_Vtbl;
     pPinImpl->pin.pConnectedTo = NULL;
-    pPinImpl->pin.pCritSec = &filter->csFilter;
     wcscpy(pPinImpl->pin.name, name);
     pPinImpl->pin.dir = PINDIR_INPUT;
     pPinImpl->pin.filter = filter;
@@ -244,7 +243,7 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const
     TRACE("(%p/%p)->(%p, %p)\n", This, iface, pReceivePin, pmt);
     dump_AM_MEDIA_TYPE(pmt);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     if (!This->pin.pConnectedTo)
     {
         ALLOCATOR_PROPERTIES props;
@@ -323,7 +322,7 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const
     }
     else
         hr = VFW_E_ALREADY_CONNECTED;
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
     return hr;
 }
 
@@ -382,7 +381,7 @@ static void PullPin_Flush(PullPin *This)
     if (This->pReader)
     {
         /* Do not allow state to change while flushing */
-        EnterCriticalSection(This->pin.pCritSec);
+        EnterCriticalSection(&This->pin.filter->csFilter);
 
         /* Flush outstanding samples */
         IAsyncReader_BeginFlush(This->pReader);
@@ -404,7 +403,7 @@ static void PullPin_Flush(PullPin *This)
 
         IAsyncReader_EndFlush(This->pReader);
 
-        LeaveCriticalSection(This->pin.pCritSec);
+        LeaveCriticalSection(&This->pin.filter->csFilter);
     }
 }
 
@@ -435,9 +434,9 @@ static void PullPin_Thread_Process(PullPin *This)
     if (FAILED(hr))
         ERR("Request error: %x\n", hr);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     SetEvent(This->hEventStateChanged);
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     if (SUCCEEDED(hr))
     do
@@ -505,19 +504,19 @@ static void PullPin_Thread_Pause(PullPin *This)
 {
     PullPin_Flush(This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     This->state = Req_Sleepy;
     SetEvent(This->hEventStateChanged);
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 }
 
 static void  PullPin_Thread_Stop(PullPin *This)
 {
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     SetEvent(This->hEventStateChanged);
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     IPin_Release(&This->pin.IPin_iface);
 
@@ -562,7 +561,7 @@ static HRESULT PullPin_InitProcessing(PullPin * This)
         DWORD dwThreadId;
 
         WaitForSingleObject(This->hEventStateChanged, INFINITE);
-        EnterCriticalSection(This->pin.pCritSec);
+        EnterCriticalSection(&This->pin.filter->csFilter);
 
         assert(!This->hThread);
         assert(This->state == Req_Die);
@@ -584,7 +583,7 @@ static HRESULT PullPin_InitProcessing(PullPin * This)
             SetEvent(This->hEventStateChanged);
             /* If assert fails, that means a command was not processed before the thread previously terminated */
         }
-        LeaveCriticalSection(This->pin.pCritSec);
+        LeaveCriticalSection(&This->pin.filter->csFilter);
     }
 
     TRACE(" -- %x\n", hr);
@@ -625,7 +624,7 @@ HRESULT PullPin_PauseProcessing(PullPin * This)
 
         PullPin_WaitForStateChange(This, INFINITE);
 
-        EnterCriticalSection(This->pin.pCritSec);
+        EnterCriticalSection(&This->pin.filter->csFilter);
 
         assert(!This->stop_playback);
         assert(This->state == Req_Run|| This->state == Req_Sleepy);
@@ -652,7 +651,7 @@ HRESULT PullPin_PauseProcessing(PullPin * This)
             } while(pSample);
         }
 
-        LeaveCriticalSection(This->pin.pCritSec);
+        LeaveCriticalSection(&This->pin.filter->csFilter);
     }
 
     return S_OK;
@@ -700,10 +699,10 @@ HRESULT WINAPI PullPin_EndOfStream(IPin * iface)
 
     TRACE("(%p)->()\n", iface);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     hr = SendFurther( iface, deliver_endofstream, NULL, NULL );
     SetEvent(This->hEventStateChanged);
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     return hr;
 }
@@ -713,11 +712,11 @@ HRESULT WINAPI PullPin_BeginFlush(IPin * iface)
     PullPin *This = impl_PullPin_from_IPin(iface);
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         SendFurther( iface, deliver_beginflush, NULL, NULL );
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     EnterCriticalSection(&This->thread_lock);
     {
@@ -733,11 +732,11 @@ HRESULT WINAPI PullPin_BeginFlush(IPin * iface)
     }
     LeaveCriticalSection(&This->thread_lock);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         This->fnCleanProc(This->pUserData);
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     return S_OK;
 }
@@ -749,9 +748,9 @@ HRESULT WINAPI PullPin_EndFlush(IPin * iface)
     TRACE("(%p)->()\n", iface);
 
     /* Send further first: Else a race condition might terminate processing early */
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     SendFurther( iface, deliver_endflush, NULL, NULL );
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     EnterCriticalSection(&This->thread_lock);
     {
@@ -779,7 +778,7 @@ HRESULT WINAPI PullPin_Disconnect(IPin *iface)
 
     TRACE("()\n");
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         if (FAILED(hr = IMemAllocator_Decommit(This->pAlloc)))
             ERR("Allocator decommit failed with error %x. Possible memory leak\n", hr);
@@ -797,7 +796,7 @@ HRESULT WINAPI PullPin_Disconnect(IPin *iface)
         else
             hr = S_FALSE;
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     WaitForSingleObject(This->hThread, INFINITE);
     CloseHandle(This->hThread);
diff --git a/dlls/strmbase/pin.c b/dlls/strmbase/pin.c
index fbb9451d563..6f1f96c9d53 100644
--- a/dlls/strmbase/pin.c
+++ b/dlls/strmbase/pin.c
@@ -184,7 +184,7 @@ HRESULT WINAPI BasePinImpl_Disconnect(IPin * iface)
 
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pCritSec);
+    EnterCriticalSection(&This->filter->csFilter);
     {
         if (This->pConnectedTo)
         {
@@ -197,7 +197,7 @@ HRESULT WINAPI BasePinImpl_Disconnect(IPin * iface)
         else
             hr = S_FALSE;
     }
-    LeaveCriticalSection(This->pCritSec);
+    LeaveCriticalSection(&This->filter->csFilter);
 
     return hr;
 }
@@ -209,7 +209,7 @@ HRESULT WINAPI BasePinImpl_ConnectedTo(IPin * iface, IPin ** ppPin)
 
     TRACE("(%p)->(%p)\n", This, ppPin);
 
-    EnterCriticalSection(This->pCritSec);
+    EnterCriticalSection(&This->filter->csFilter);
     {
         if (This->pConnectedTo)
         {
@@ -223,7 +223,7 @@ HRESULT WINAPI BasePinImpl_ConnectedTo(IPin * iface, IPin ** ppPin)
             *ppPin = NULL;
         }
     }
-    LeaveCriticalSection(This->pCritSec);
+    LeaveCriticalSection(&This->filter->csFilter);
 
     return hr;
 }
@@ -235,7 +235,7 @@ HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE * pmt
 
     TRACE("(%p)->(%p)\n", This, pmt);
 
-    EnterCriticalSection(This->pCritSec);
+    EnterCriticalSection(&This->filter->csFilter);
     {
         if (This->pConnectedTo)
         {
@@ -248,7 +248,7 @@ HRESULT WINAPI BasePinImpl_ConnectionMediaType(IPin * iface, AM_MEDIA_TYPE * pmt
             hr = VFW_E_NOT_CONNECTED;
         }
     }
-    LeaveCriticalSection(This->pCritSec);
+    LeaveCriticalSection(&This->filter->csFilter);
 
     return hr;
 }
@@ -384,7 +384,7 @@ HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const
      * catches the obvious case */
     assert(pReceivePin != iface);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         /* if we have been a specific type to connect with, then we can either connect
          * with that or fail. We cannot choose different AM_MEDIA_TYPE */
@@ -447,7 +447,7 @@ HRESULT WINAPI BaseOutputPinImpl_Connect(IPin * iface, IPin * pReceivePin, const
             } /* if not found */
         } /* if negotiate media type */
     } /* if succeeded */
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     TRACE(" -- %x\n", hr);
     return hr;
@@ -466,7 +466,7 @@ HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface)
 
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         if (This->pMemInputPin)
         {
@@ -484,7 +484,7 @@ HRESULT WINAPI BaseOutputPinImpl_Disconnect(IPin * iface)
         else
             hr = S_FALSE;
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     return hr;
 }
@@ -542,7 +542,7 @@ HRESULT WINAPI BaseOutputPinImpl_Deliver(BaseOutputPin *This, IMediaSample * pSa
     PIN_INFO pinInfo;
     HRESULT hr;
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         if (!This->pin.pConnectedTo || !This->pMemInputPin)
             hr = VFW_E_NOT_CONNECTED;
@@ -556,7 +556,7 @@ HRESULT WINAPI BaseOutputPinImpl_Deliver(BaseOutputPin *This, IMediaSample * pSa
             hr = IPin_QueryPinInfo(This->pin.pConnectedTo, &pinInfo);
         }
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     if (SUCCEEDED(hr))
     {
@@ -582,14 +582,14 @@ HRESULT WINAPI BaseOutputPinImpl_Active(BaseOutputPin *This)
 
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         if (!This->pin.pConnectedTo || !This->pMemInputPin)
             hr = VFW_E_NOT_CONNECTED;
         else
             hr = IMemAllocator_Commit(This->pAllocator);
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     TRACE("--> %08x\n", hr);
     return hr;
@@ -602,14 +602,14 @@ HRESULT WINAPI BaseOutputPinImpl_Inactive(BaseOutputPin *This)
 
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         if (!This->pin.pConnectedTo || !This->pMemInputPin)
             hr = VFW_E_NOT_CONNECTED;
         else
             hr = IMemAllocator_Decommit(This->pAllocator);
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     TRACE("--> %08x\n", hr);
     return hr;
@@ -709,7 +709,6 @@ void strmbase_source_init(BaseOutputPin *pin, const IPinVtbl *vtbl, struct strmb
 {
     memset(pin, 0, sizeof(*pin));
     pin->pin.IPin_iface.lpVtbl = vtbl;
-    pin->pin.pCritSec = &filter->csFilter;
     pin->pin.dRate = 1.0;
     pin->pin.filter = filter;
     pin->pin.dir = PINDIR_OUTPUT;
@@ -779,7 +778,7 @@ HRESULT WINAPI BaseInputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceiveP
     TRACE("(%p)->(%p, %p)\n", This, pReceivePin, pmt);
     dump_AM_MEDIA_TYPE(pmt);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     {
         if (This->pin.pConnectedTo)
             hr = VFW_E_ALREADY_CONNECTED;
@@ -806,7 +805,7 @@ HRESULT WINAPI BaseInputPinImpl_ReceiveConnection(IPin * iface, IPin * pReceiveP
             IPin_AddRef(pReceivePin);
         }
     }
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     return hr;
 }
@@ -823,12 +822,12 @@ HRESULT WINAPI BaseInputPinImpl_EndOfStream(IPin * iface)
 
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     if (This->flushing)
         hr = S_FALSE;
     else
         This->end_of_stream = TRUE;
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     if (hr == S_OK)
         hr = SendFurther( iface, deliver_endofstream, NULL, NULL );
@@ -846,11 +845,11 @@ HRESULT WINAPI BaseInputPinImpl_BeginFlush(IPin * iface)
     HRESULT hr;
     TRACE("(%p) semi-stub\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     This->flushing = TRUE;
 
     hr = SendFurther( iface, deliver_beginflush, NULL, NULL );
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     return hr;
 }
@@ -866,11 +865,11 @@ HRESULT WINAPI BaseInputPinImpl_EndFlush(IPin * iface)
     HRESULT hr;
     TRACE("(%p)->()\n", This);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&This->pin.filter->csFilter);
     This->flushing = This->end_of_stream = FALSE;
 
     hr = SendFurther( iface, deliver_endflush, NULL, NULL );
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&This->pin.filter->csFilter);
 
     return hr;
 }
@@ -1037,7 +1036,6 @@ void strmbase_sink_init(BaseInputPin *pin, const IPinVtbl *vtbl, struct strmbase
 {
     memset(pin, 0, sizeof(*pin));
     pin->pin.IPin_iface.lpVtbl = vtbl;
-    pin->pin.pCritSec = &filter->csFilter;
     pin->pin.dRate = 1.0;
     pin->pin.filter = filter;
     pin->pin.dir = PINDIR_INPUT;
diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c
index a74c975b9a9..21083526a8c 100644
--- a/dlls/strmbase/renderer.c
+++ b/dlls/strmbase/renderer.c
@@ -52,14 +52,14 @@ static HRESULT WINAPI BaseRenderer_InputPin_ReceiveConnection(IPin *iface, IPin
 
     TRACE("iface %p, peer %p, mt %p.\n", iface, peer, mt);
 
-    EnterCriticalSection(filter->sink.pin.pCritSec);
+    EnterCriticalSection(&filter->filter.csFilter);
     hr = BaseInputPinImpl_ReceiveConnection(iface, peer, mt);
     if (SUCCEEDED(hr))
     {
         if (filter->pFuncsTable->pfnCompleteConnect)
             hr = filter->pFuncsTable->pfnCompleteConnect(filter, peer);
     }
-    LeaveCriticalSection(filter->sink.pin.pCritSec);
+    LeaveCriticalSection(&filter->filter.csFilter);
 
     return hr;
 }
@@ -71,7 +71,7 @@ static HRESULT WINAPI BaseRenderer_InputPin_Disconnect(IPin * iface)
 
     TRACE("iface %p.\n", iface);
 
-    EnterCriticalSection(filter->sink.pin.pCritSec);
+    EnterCriticalSection(&filter->filter.csFilter);
     hr = BasePinImpl_Disconnect(iface);
     if (SUCCEEDED(hr))
     {
@@ -79,7 +79,7 @@ static HRESULT WINAPI BaseRenderer_InputPin_Disconnect(IPin * iface)
             hr = filter->pFuncsTable->pfnBreakConnect(filter);
     }
     BaseRendererImpl_ClearPendingSample(filter);
-    LeaveCriticalSection(filter->sink.pin.pCritSec);
+    LeaveCriticalSection(&filter->filter.csFilter);
 
     return hr;
 }
diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 8a85f290a12..e687569039b 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -1283,7 +1283,6 @@ IUnknown * CALLBACK Gstreamer_Splitter_create(IUnknown *outer, HRESULT *phr)
     lstrcpynW(This->pInputPin.pin.name, wcsInputPinName, ARRAY_SIZE(This->pInputPin.pin.name));
     This->pInputPin.pin.IPin_iface.lpVtbl = &GST_InputPin_Vtbl;
     This->pInputPin.pin.pConnectedTo = NULL;
-    This->pInputPin.pin.pCritSec = &This->filter.csFilter;
     ZeroMemory(&This->pInputPin.pin.mtCurrent, sizeof(AM_MEDIA_TYPE));
     *phr = S_OK;
 
@@ -1740,14 +1739,12 @@ static HRESULT WINAPI GSTOutPin_DecideAllocator(BaseOutputPin *base, IMemInputPi
 
 static void free_source_pin(GSTOutPin *pin)
 {
-    EnterCriticalSection(pin->pin.pin.pCritSec);
     if (pin->pin.pin.pConnectedTo)
     {
         if (SUCCEEDED(IMemAllocator_Decommit(pin->pin.pAllocator)))
             IPin_Disconnect(pin->pin.pin.pConnectedTo);
         IPin_Disconnect(&pin->pin.pin.IPin_iface);
     }
-    LeaveCriticalSection(pin->pin.pin.pCritSec);
 
     if (pin->their_src)
     {
@@ -1877,7 +1874,7 @@ static HRESULT WINAPI GSTInPin_ReceiveConnection(IPin *iface, IPin *pReceivePin,
 
     mark_wine_thread();
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&filter->filter.csFilter);
     if (!This->pin.pConnectedTo) {
         ALLOCATOR_PROPERTIES props;
         IMemAllocator *pAlloc = NULL;
@@ -1936,13 +1933,14 @@ static HRESULT WINAPI GSTInPin_ReceiveConnection(IPin *iface, IPin *pReceivePin,
         TRACE("Size: %i\n", props.cbBuffer);
     } else
         hr = VFW_E_ALREADY_CONNECTED;
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&filter->filter.csFilter);
     return hr;
 }
 
 static HRESULT WINAPI GSTInPin_Disconnect(IPin *iface)
 {
     GSTInPin *This = impl_sink_from_IPin(iface);
+    GSTImpl *filter = impl_from_strmbase_filter(This->pin.filter);
     HRESULT hr;
     FILTER_STATE state;
 
@@ -1950,8 +1948,8 @@ static HRESULT WINAPI GSTInPin_Disconnect(IPin *iface)
 
     mark_wine_thread();
 
-    hr = IBaseFilter_GetState(&This->pin.filter->IBaseFilter_iface, INFINITE, &state);
-    EnterCriticalSection(This->pin.pCritSec);
+    hr = IBaseFilter_GetState(&filter->filter.IBaseFilter_iface, INFINITE, &state);
+    EnterCriticalSection(&filter->filter.csFilter);
     if (This->pin.pConnectedTo) {
         GSTImpl *Parser = impl_from_strmbase_filter(This->pin.filter);
 
@@ -1965,7 +1963,7 @@ static HRESULT WINAPI GSTInPin_Disconnect(IPin *iface)
             hr = VFW_E_NOT_STOPPED;
     } else
         hr = S_FALSE;
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&filter->filter.csFilter);
     return hr;
 }
 
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c
index 1d845a9e8fb..61ebeab2387 100644
--- a/dlls/wineqtdecoder/qtsplitter.c
+++ b/dlls/wineqtdecoder/qtsplitter.c
@@ -317,7 +317,6 @@ IUnknown * CALLBACK QTSplitter_create(IUnknown *outer, HRESULT *phr)
     lstrcpynW(This->pInputPin.pin.name, wcsInputPinName, ARRAY_SIZE(This->pInputPin.pin.name));
     This->pInputPin.pin.IPin_iface.lpVtbl = &QT_InputPin_Vtbl;
     This->pInputPin.pin.pConnectedTo = NULL;
-    This->pInputPin.pin.pCritSec = &This->filter.csFilter;
 
     SourceSeeking_Init(&This->sourceSeeking, &QT_Seeking_Vtbl, QTSplitter_ChangeStop, QTSplitter_ChangeStart, QTSplitter_ChangeRate,  &This->filter.csFilter);
 
@@ -778,14 +777,12 @@ static const IBaseFilterVtbl QT_Vtbl = {
 
 static void free_source_pin(QTOutPin *pin)
 {
-    EnterCriticalSection(pin->pin.pin.pCritSec);
     if (pin->pin.pin.pConnectedTo)
     {
         if (SUCCEEDED(IMemAllocator_Decommit(pin->pin.pAllocator)))
             IPin_Disconnect(pin->pin.pin.pConnectedTo);
         IPin_Disconnect(&pin->pin.pin.IPin_iface);
     }
-    LeaveCriticalSection(pin->pin.pin.pCritSec);
 
     DeleteMediaType(pin->pmt);
     strmbase_source_cleanup(&pin->pin);
@@ -1044,7 +1041,7 @@ static HRESULT WINAPI QTInPin_ReceiveConnection(IPin *iface, IPin *pReceivePin,
 
     TRACE("(%p/%p)->(%p, %p)\n", This, iface, pReceivePin, pmt);
 
-    EnterCriticalSection(This->pin.pCritSec);
+    EnterCriticalSection(&filter->filter.csFilter);
     This->pReader = NULL;
 
     if (This->pin.pConnectedTo)
@@ -1061,19 +1058,19 @@ static HRESULT WINAPI QTInPin_ReceiveConnection(IPin *iface, IPin *pReceivePin,
 
     if (FAILED(hr))
     {
-        LeaveCriticalSection(This->pin.pCritSec);
+        LeaveCriticalSection(&filter->filter.csFilter);
         return hr;
     }
 
     hr = IPin_QueryInterface(pReceivePin, &IID_IAsyncReader, (LPVOID *)&This->pReader);
     if (FAILED(hr))
     {
-        LeaveCriticalSection(This->pin.pCritSec);
+        LeaveCriticalSection(&filter->filter.csFilter);
         TRACE("Input source is not an AsyncReader\n");
         return hr;
     }
 
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&filter->filter.csFilter);
     EnterCriticalSection(&filter->filter.csFilter);
     hr = QT_Process_Movie(filter);
     if (FAILED(hr))
@@ -1129,11 +1126,12 @@ static HRESULT WINAPI QTInPin_Disconnect(IPin *iface)
 {
     HRESULT hr;
     QTInPin *This = impl_from_IPin(iface);
+    QTSplitter *filter = impl_from_strmbase_filter(This->pin.filter);
     FILTER_STATE state;
     TRACE("()\n");
 
-    hr = IBaseFilter_GetState(&This->pin.filter->IBaseFilter_iface, INFINITE, &state);
-    EnterCriticalSection(This->pin.pCritSec);
+    hr = IBaseFilter_GetState(&filter->filter.IBaseFilter_iface, INFINITE, &state);
+    EnterCriticalSection(&filter->filter.csFilter);
     if (This->pin.pConnectedTo)
     {
         QTSplitter *Parser = impl_from_strmbase_filter(This->pin.filter);
@@ -1151,7 +1149,7 @@ static HRESULT WINAPI QTInPin_Disconnect(IPin *iface)
     }
     else
         hr = S_FALSE;
-    LeaveCriticalSection(This->pin.pCritSec);
+    LeaveCriticalSection(&filter->filter.csFilter);
     return hr;
 }
 
diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h
index 08e8b7cbb5d..b2903999155 100644
--- a/include/wine/strmbase.h
+++ b/include/wine/strmbase.h
@@ -31,7 +31,6 @@ void WINAPI DeleteMediaType(AM_MEDIA_TYPE * pMediaType);
 typedef struct BasePin
 {
     IPin IPin_iface;
-    CRITICAL_SECTION *pCritSec;
     struct strmbase_filter *filter;
     PIN_DIRECTION dir;
     WCHAR name[128];
-- 
2.22.0




More information about the wine-devel mailing list