- clean up some debugging code
  - set NULL owner when setting BASEFLAG_READY_TO_DIE, so that the handle can be freed.

svn path=/branches/reactos-yarotows/; revision=47217
This commit is contained in:
Jérôme Gardou 2010-05-15 09:57:36 +00:00
parent b0aa4f5a2c
commit a5aa252f47

View file

@ -631,11 +631,22 @@ LockHandle:
}
else if (Object->ulShareCount != 0)
{
NTSTATUS Status;
PEPROCESS OldProcess;
Object->BaseFlags |= BASEFLAG_READY_TO_DIE;
DPRINT("Object %p, ulShareCount = %d\n", Object->hHmgr, Object->ulShareCount);
//GDIDBG_TRACECALLER();
//GDIDBG_TRACESHARELOCKER(GDI_HANDLE_GET_INDEX(hObj));
(void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, PrevProcId);
/* Set NULL owner. Do the work here to avoid race conditions */
Status = PsLookupProcessByProcessId((HANDLE)((ULONG_PTR)PrevProcId & ~0x1), &OldProcess);
if (NT_SUCCESS(Status))
{
PPROCESSINFO W32Process = (PPROCESSINFO)OldProcess->Win32Process;
if (W32Process != NULL)
{
InterlockedDecrement(&W32Process->GDIHandleCount);
}
ObDereferenceObject(OldProcess);
}
(void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, NULL);
/* Don't wait on shared locks */
return FALSE;
}
@ -1037,11 +1048,6 @@ GDIOBJ_LockObj(HGDIOBJ hObj, DWORD ExpectedType)
{
if (Object->Tid != Thread)
{
GDIDBG_TRACELOOP(hObj, Object->Tid, Thread);
GDIDBG_TRACECALLER();
GDIDBG_TRACELOCKER(hObj);
GDIDBG_TRACEALLOCATOR(hObj);
/* Unlock the handle table entry. */
(void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, PrevProcId);