quartz: Don't delete critical sections before the filter's pins are
done using them
Chris Robinson
chris.kcat at gmail.com
Mon Mar 19 15:46:26 CDT 2007
-------------- next part --------------
From cfc20e8e63b37480a5a8d1b833e3c27ecfaddcbe Mon Sep 17 00:00:00 2001
From: Chris Robinson <chris.kcat at gmail.com>
Date: Mon, 19 Mar 2007 13:26:09 -0700
Subject: [PATCH] quartz: Don't delete critical sections before the filter's 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);
--
1.4.4.4
More information about the wine-patches
mailing list