Commit b1bfae28 authored by Chris Robinson's avatar Chris Robinson Committed by Alexandre Julliard

quartz: Use a safe APC to kill the PullPin thread when the PullPin is being released.

parent 9d1f49cd
...@@ -1121,6 +1121,15 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const ...@@ -1121,6 +1121,15 @@ HRESULT WINAPI PullPin_ReceiveConnection(IPin * iface, IPin * pReceivePin, const
return hr; return hr;
} }
static void CALLBACK PullPin_SafeThreadStop(ULONG_PTR handle)
{
HANDLE hThread = (HANDLE)handle;
if (hThread)
CloseHandle(hThread);
ExitThread(0);
}
HRESULT WINAPI PullPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv) HRESULT WINAPI PullPin_QueryInterface(IPin * iface, REFIID riid, LPVOID * ppv)
{ {
PullPin *This = (PullPin *)iface; PullPin *This = (PullPin *)iface;
...@@ -1155,7 +1164,14 @@ ULONG WINAPI PullPin_Release(IPin * iface) ...@@ -1155,7 +1164,14 @@ ULONG WINAPI PullPin_Release(IPin * iface)
if (!refCount) if (!refCount)
{ {
if (This->hThread) if (This->hThread)
PullPin_StopProcessing(This); {
HRESULT hr;
if (!QueueUserAPC(PullPin_SafeThreadStop, This->hThread, (ULONG_PTR)This->hThread))
ERR("Cannot stop PullPin thread (GetLastError() = %d)!", GetLastError());
if (This->pAlloc && FAILED(hr = IMemAllocator_Decommit(This->pAlloc)))
ERR("Allocator decommit failed with error %x. Possible memory leak\n", hr);
}
if(This->pAlloc) if(This->pAlloc)
IMemAllocator_Release(This->pAlloc); IMemAllocator_Release(This->pAlloc);
if(This->pReader) if(This->pReader)
......
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