Commit 3d43a629 authored by Maarten Lankhorst's avatar Maarten Lankhorst Committed by Alexandre Julliard

quartz: Have thread safety in memallocator.

parent dae09d00
......@@ -257,7 +257,8 @@ static HRESULT WINAPI BaseMemAllocator_Decommit(IMemAllocator * iface)
}
else
{
assert(This->lWaiting == 0);
if (This->lWaiting != 0)
ERR("Waiting: %d\n", This->lWaiting);
This->bCommitted = FALSE;
CloseHandle(This->hSemWaiting);
......@@ -286,19 +287,24 @@ static HRESULT WINAPI BaseMemAllocator_GetBuffer(IMemAllocator * iface, IMediaSa
*pSample = NULL;
if (!This->bCommitted)
return VFW_E_NOT_COMMITTED;
EnterCriticalSection(This->pCritSect);
if (!This->bCommitted || This->bDecommitQueued)
hr = VFW_E_NOT_COMMITTED;
else
++This->lWaiting;
LeaveCriticalSection(This->pCritSect);
if (FAILED(hr))
return hr;
This->lWaiting++;
if (WaitForSingleObject(This->hSemWaiting, (dwFlags & AM_GBF_NOWAIT) ? 0 : INFINITE) != WAIT_OBJECT_0)
{
This->lWaiting--;
InterlockedDecrement(&This->lWaiting);
return VFW_E_TIMEOUT;
}
This->lWaiting--;
EnterCriticalSection(This->pCritSect);
{
--This->lWaiting;
if (!This->bCommitted)
hr = VFW_E_NOT_COMMITTED;
else if (This->bDecommitQueued)
......@@ -347,7 +353,8 @@ static HRESULT WINAPI BaseMemAllocator_ReleaseBuffer(IMemAllocator * iface, IMed
{
HRESULT hrfree;
assert(This->lWaiting == 0);
if (This->lWaiting != 0)
ERR("Waiting: %d\n", This->lWaiting);
This->bCommitted = FALSE;
This->bDecommitQueued = FALSE;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment