Maarten Lankhorst : quartz: Don' t hold lock when changing state in filtergraph.
Alexandre Julliard
julliard at winehq.org
Wed Apr 2 06:55:23 CDT 2008
Module: wine
Branch: master
Commit: 7cb1324ae3d5924d8191d86ac2ab6306b2de36ad
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7cb1324ae3d5924d8191d86ac2ab6306b2de36ad
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Tue Apr 1 14:03:34 2008 -0700
quartz: Don't hold lock when changing state in filtergraph.
---
dlls/quartz/filtergraph.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index 4f8eebb..5fd6a95 100644
--- a/dlls/quartz/filtergraph.c
+++ b/dlls/quartz/filtergraph.c
@@ -1472,7 +1472,9 @@ static HRESULT ExploreGraph(IFilterGraphImpl* pGraph, IPin* pOutputPin, fnFoundF
CoTaskMemFree(ppPins);
}
TRACE("Doing stuff with filter %p\n", PinInfo.pFilter);
+ LeaveCriticalSection(&pGraph->cs);
FoundFilter(PinInfo.pFilter);
+ EnterCriticalSection(&pGraph->cs);
}
if (PinInfo.pFilter) IBaseFilter_Release(PinInfo.pFilter);
@@ -1499,11 +1501,11 @@ static HRESULT WINAPI SendRun(IBaseFilter *pFilter) {
}
static HRESULT WINAPI SendPause(IBaseFilter *pFilter) {
- return IBaseFilter_Pause(pFilter);
+ return IBaseFilter_Pause(pFilter);
}
static HRESULT WINAPI SendStop(IBaseFilter *pFilter) {
- return IBaseFilter_Stop(pFilter);
+ return IBaseFilter_Stop(pFilter);
}
static HRESULT SendFilterMessage(IMediaControl *iface, fnFoundFilter FoundFilter) {
@@ -1776,7 +1778,9 @@ static HRESULT all_renderers_seek(IFilterGraphImpl *This, fnFoundSeek FoundSeek,
IBaseFilter_QueryInterface(pfilter, &IID_IMediaSeeking, (void**)&seek);
if (!seek)
continue;
+ LeaveCriticalSection(&This->cs);
hr = FoundSeek(This, seek, arg);
+ EnterCriticalSection(&This->cs);
IMediaSeeking_Release(seek);
if (hr_return != E_NOTIMPL)
allnotimpl = FALSE;
@@ -1980,6 +1984,7 @@ static HRESULT WINAPI MediaSeeking_GetCurrentPosition(IMediaSeeking *iface,
if (!pCurrent)
return E_POINTER;
+ EnterCriticalSection(&This->cs);
if (This->state == State_Running && This->refClock)
{
IReferenceClock_GetTime(This->refClock, &time);
@@ -1991,6 +1996,7 @@ static HRESULT WINAPI MediaSeeking_GetCurrentPosition(IMediaSeeking *iface,
}
else
*pCurrent = This->position;
+ LeaveCriticalSection(&This->cs);
TRACE("Time: %lld.%03lld\n", *pCurrent / 10000000, (*pCurrent / 10000)%1000);
return S_OK;
More information about the wine-cvs
mailing list