From 317c3b2171d84efacc789073f9cd05f5f97fba62 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Thu, 10 Jul 2008 14:32:58 -0700 Subject: [PATCH] quartz: End the flush on other pins first before finishing flush on pullpin Else there might be a race condition causing threads to terminate because it still thinks its flushing --- dlls/quartz/pin.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/dlls/quartz/pin.c b/dlls/quartz/pin.c index bb562ad..e45db96 100644 --- a/dlls/quartz/pin.c +++ b/dlls/quartz/pin.c @@ -1783,6 +1783,11 @@ 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); + SendFurther( iface, deliver_endflush, NULL, NULL ); + LeaveCriticalSection(This->pin.pCritSec); + EnterCriticalSection(&This->thread_lock); { FILTER_STATE state; @@ -1795,10 +1800,6 @@ HRESULT WINAPI PullPin_EndFlush(IPin * iface) } LeaveCriticalSection(&This->thread_lock); - EnterCriticalSection(This->pin.pCritSec); - SendFurther( iface, deliver_endflush, NULL, NULL ); - LeaveCriticalSection(This->pin.pCritSec); - return S_OK; } -- 1.5.4.1