Author: jgardou Date: Wed Jun 16 18:47:04 2010 New Revision: 47788
URL: http://svn.reactos.org/svn/reactos?rev=47788&view=rev Log: [WIN32k] - Chek if there is something to do in GDIOBJ_SetOwnership before doing it
Modified: trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c
Modified: trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/obj... ============================================================================== --- trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c [iso-8859-1] (original) +++ trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c [iso-8859-1] Wed Jun 16 18:47:04 2010 @@ -1412,6 +1412,19 @@ PPROCESSINFO W32Process; NTSTATUS Status;
+ if (NewOwner != NULL) + { + ProcessId = PsGetProcessId(NewOwner); + } + else + ProcessId = 0; + + if((ULONG_PTR)ProcessId == ((ULONG_PTR)PrevProcId & ~0x1)) + { + DPRINT("Setting same process than previous one, nothing to do\n"); + goto done; + } + /* dereference the process' object counter */ /* FIXME */ if ((ULONG_PTR)PrevProcId & ~0x1) @@ -1430,8 +1443,6 @@
if (NewOwner != NULL) { - ProcessId = PsGetProcessId(NewOwner); - /* Increase the new process' object counter */ W32Process = (PPROCESSINFO)NewOwner->Win32Process; if (W32Process != NULL) @@ -1439,9 +1450,8 @@ InterlockedIncrement(&W32Process->GDIHandleCount); } } - else - ProcessId = 0; - + + done: /* remove the process id lock and change it to the new process id */ (void)InterlockedExchangePointer((PVOID*)&Entry->ProcessId, ProcessId);