Chris Robinson : quartz: Don't delete critical sections before the filter' s pins are done using them.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Mar 20 08:11:04 CDT 2007


Module: wine
Branch: master
Commit: 6bd3b156aca74ab50e98a097c723e583c458ef43
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6bd3b156aca74ab50e98a097c723e583c458ef43

Author: Chris Robinson <chris.kcat at gmail.com>
Date:   Mon Mar 19 13:26:09 2007 -0700

quartz: Don't delete critical sections before the filter's pins are done using them.

---

 dlls/quartz/dsoundrender.c  |    5 +++--
 dlls/quartz/parser.c        |    5 +++--
 dlls/quartz/transform.c     |    6 +++---
 dlls/quartz/videorenderer.c |    6 +++---
 4 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c
index b5fa40b..5e84e21 100644
--- a/dlls/quartz/dsoundrender.c
+++ b/dlls/quartz/dsoundrender.c
@@ -400,8 +400,6 @@ static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface)
     {
         IPin *pConnectedTo;
 
-        This->csFilter.DebugInfo->Spare[0] = 0;
-        DeleteCriticalSection(&This->csFilter);
         if (This->pClock)
             IReferenceClock_Release(This->pClock);
 
@@ -425,6 +423,9 @@ static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface)
         This->lpVtbl = NULL;
         This->IBasicAudio_vtbl = NULL;
         
+        This->csFilter.DebugInfo->Spare[0] = 0;
+        DeleteCriticalSection(&This->csFilter);
+
         TRACE("Destroying Audio Renderer\n");
         CoTaskMemFree(This);
         
diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c
index fb8c085..15e01e8 100644
--- a/dlls/quartz/parser.c
+++ b/dlls/quartz/parser.c
@@ -187,8 +187,6 @@ static ULONG WINAPI Parser_Release(IBaseFilter * iface)
     {
         ULONG i;
 
-        This->csFilter.DebugInfo->Spare[0] = 0;
-        DeleteCriticalSection(&This->csFilter);
         if (This->pClock)
             IReferenceClock_Release(This->pClock);
         
@@ -208,6 +206,9 @@ static ULONG WINAPI Parser_Release(IBaseFilter * iface)
         
         CoTaskMemFree(This->ppPins);
         This->lpVtbl = NULL;
+
+        This->csFilter.DebugInfo->Spare[0] = 0;
+        DeleteCriticalSection(&This->csFilter);
         
         TRACE("Destroying parser\n");
         CoTaskMemFree(This);
diff --git a/dlls/quartz/transform.c b/dlls/quartz/transform.c
index 04366ef..8343afb 100644
--- a/dlls/quartz/transform.c
+++ b/dlls/quartz/transform.c
@@ -276,9 +276,6 @@ static ULONG WINAPI TransformFilter_Release(IBaseFilter * iface)
     {
         ULONG i;
 
-        This->csFilter.DebugInfo->Spare[0] = 0;
-        DeleteCriticalSection(&This->csFilter);
-
         if (This->pClock)
             IReferenceClock_Release(This->pClock);
 
@@ -301,6 +298,9 @@ static ULONG WINAPI TransformFilter_Release(IBaseFilter * iface)
 
 	This->pFuncsTable->pfnCleanup(This);
 
+        This->csFilter.DebugInfo->Spare[0] = 0;
+        DeleteCriticalSection(&This->csFilter);
+
         TRACE("Destroying transform filter\n");
         CoTaskMemFree(This);
 
diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c
index ccfa61a..a7df440 100644
--- a/dlls/quartz/videorenderer.c
+++ b/dlls/quartz/videorenderer.c
@@ -524,9 +524,6 @@ static ULONG WINAPI VideoRenderer_Release(IBaseFilter * iface)
     {
         IPin *pConnectedTo;
 
-        This->csFilter.DebugInfo->Spare[0] = 0;
-        DeleteCriticalSection(&This->csFilter);
-
         DestroyWindow(This->hWnd);
         PostThreadMessageA(This->ThreadID, WM_QUIT, 0, 0);
         WaitForSingleObject(This->hThread, INFINITE);
@@ -547,6 +544,9 @@ static ULONG WINAPI VideoRenderer_Release(IBaseFilter * iface)
         CoTaskMemFree(This->ppPins);
         This->lpVtbl = NULL;
         
+        This->csFilter.DebugInfo->Spare[0] = 0;
+        DeleteCriticalSection(&This->csFilter);
+
         TRACE("Destroying Video Renderer\n");
         CoTaskMemFree(This);
         




More information about the wine-cvs mailing list