mirror of
https://github.com/reactos/reactos.git
synced 2024-09-09 20:30:04 +00:00
[WIN32K]
- 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:
parent
b0aa4f5a2c
commit
a5aa252f47
|
@ -631,11 +631,22 @@ LockHandle:
|
||||||
}
|
}
|
||||||
else if (Object->ulShareCount != 0)
|
else if (Object->ulShareCount != 0)
|
||||||
{
|
{
|
||||||
|
NTSTATUS Status;
|
||||||
|
PEPROCESS OldProcess;
|
||||||
Object->BaseFlags |= BASEFLAG_READY_TO_DIE;
|
Object->BaseFlags |= BASEFLAG_READY_TO_DIE;
|
||||||
DPRINT("Object %p, ulShareCount = %d\n", Object->hHmgr, Object->ulShareCount);
|
DPRINT("Object %p, ulShareCount = %d\n", Object->hHmgr, Object->ulShareCount);
|
||||||
//GDIDBG_TRACECALLER();
|
/* Set NULL owner. Do the work here to avoid race conditions */
|
||||||
//GDIDBG_TRACESHARELOCKER(GDI_HANDLE_GET_INDEX(hObj));
|
Status = PsLookupProcessByProcessId((HANDLE)((ULONG_PTR)PrevProcId & ~0x1), &OldProcess);
|
||||||
(void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, PrevProcId);
|
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 */
|
/* Don't wait on shared locks */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -1037,11 +1048,6 @@ GDIOBJ_LockObj(HGDIOBJ hObj, DWORD ExpectedType)
|
||||||
{
|
{
|
||||||
if (Object->Tid != Thread)
|
if (Object->Tid != Thread)
|
||||||
{
|
{
|
||||||
GDIDBG_TRACELOOP(hObj, Object->Tid, Thread);
|
|
||||||
GDIDBG_TRACECALLER();
|
|
||||||
GDIDBG_TRACELOCKER(hObj);
|
|
||||||
GDIDBG_TRACEALLOCATOR(hObj);
|
|
||||||
|
|
||||||
/* Unlock the handle table entry. */
|
/* Unlock the handle table entry. */
|
||||||
(void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, PrevProcId);
|
(void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, PrevProcId);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue