Author: tkreuzer
Date: Thu Apr 28 08:26:46 2011
New Revision: 51470

URL: http://svn.reactos.org/svn/reactos?rev=51470&view=rev
Log:
[WIN32K]
Rewrite of the GDI handle manager

- The old handle manager used a completely retarded spinlock in combination 
with KeDelayExecutionThread() for both exclusive
and shared locks. This is probably the most uneffective algorithm possible. It 
was also duplicating code everywhere and it was a overall mess It 

is now replaced with a lock-free reference counter for shared locks and a 
pushlock for exclusive locks. -> Better performance and scalability.
- Allocate user mode object attributes from the new gdi pool. This way, we 
don't need any caching, since the pool serves as a cache. Its also 

much faster and uses much less memory.
- Allow object allocations of different size, instead of fixed size from a 
table. This way a single allocation can take care of actual needs.
- Allow allcoating objects without a handle and insert them into the handle 
table later
- Properly synchronize the process GDIHandleCount. Now gdiview and taskmanager 
show the correct number of gdi handles.
- Implement a new event tracking system, that is capable of tracking all 
reverences and locks of objects and pool allocations to help track 

possible leaks
- Make sure that all objects of a process are deleted in cleanup
- Make sure all usermode memory allocations are freed, when cleaning up the 
process pool.
- Make sure that each object type is using the correct type of lock (either 
shared or exclusive, not a mixture)
- Fix some object / reference leaks
- Lots of inferface improvements
- Use global variables for certain things instead of members in the mapped gdi 
handle table
- Make IntSysCreateRectpRgn create a region without a handle
- Fix detection od source and mask use in GreStretchBltMask
- Use GDIOBJ_bLockMultipleObjects in NtGdiCombineRegion to avoid possible 
deadlocks
- Fix NtGdiAbortPath to reset DCPATH_ACTIVE flag in the dc and only bail out on 
error, instead of always
- Replace DC_AllocateDcAttr and DC_AllocDcAttr with DC_bAllocDcAttr using the 
new user mode pool
- Remove DCU_SyncDcAttrtoUser and DCU_SynchDcAttrtoUser. Those functions were 
unused and didn't do anything useful anyway,
- Replace IntGdiSetDCOwnerEx and DC_SetOwnership with GreSetDCOwner, remove 
unused NoSetBrush parameter
- Replace GDIOBJ_bValidateHandle and IsObjectDead with GreIsHandleValid
- Chage GDIOBJ_bLockMultipleObjects: pass object type, return a BOOL, whether 
all objects could be locked, cleanup on failure

Modified:
    trunk/reactos/subsystems/win32/win32k/eng/driverobj.c
    trunk/reactos/subsystems/win32/win32k/eng/engbrush.c
    trunk/reactos/subsystems/win32/win32k/eng/engwindow.c
    trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c
    trunk/reactos/subsystems/win32/win32k/eng/surface.c
    trunk/reactos/subsystems/win32/win32k/include/brush.h
    trunk/reactos/subsystems/win32/win32k/include/color.h
    trunk/reactos/subsystems/win32/win32k/include/dc.h
    trunk/reactos/subsystems/win32/win32k/include/dib.h
    trunk/reactos/subsystems/win32/win32k/include/driverobj.h
    trunk/reactos/subsystems/win32/win32k/include/gdidebug.h
    trunk/reactos/subsystems/win32/win32k/include/gdiobj.h
    trunk/reactos/subsystems/win32/win32k/include/misc.h
    trunk/reactos/subsystems/win32/win32k/include/palette.h
    trunk/reactos/subsystems/win32/win32k/include/path.h
    trunk/reactos/subsystems/win32/win32k/include/pen.h
    trunk/reactos/subsystems/win32/win32k/include/region.h
    trunk/reactos/subsystems/win32/win32k/include/surface.h
    trunk/reactos/subsystems/win32/win32k/include/text.h
    trunk/reactos/subsystems/win32/win32k/include/win32.h
    trunk/reactos/subsystems/win32/win32k/include/win32kp.h
    trunk/reactos/subsystems/win32/win32k/main/dllmain.c
    trunk/reactos/subsystems/win32/win32k/ntddraw/dxeng.c
    trunk/reactos/subsystems/win32/win32k/ntuser/cursoricon.c
    trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c
    trunk/reactos/subsystems/win32/win32k/ntuser/message.c
    trunk/reactos/subsystems/win32/win32k/ntuser/monitor.c
    trunk/reactos/subsystems/win32/win32k/ntuser/painting.c
    trunk/reactos/subsystems/win32/win32k/ntuser/sysparams.c
    trunk/reactos/subsystems/win32/win32k/ntuser/vis.c
    trunk/reactos/subsystems/win32/win32k/ntuser/windc.c
    trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c
    trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c
    trunk/reactos/subsystems/win32/win32k/objects/bitblt.c
    trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
    trunk/reactos/subsystems/win32/win32k/objects/brush.c
    trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c
    trunk/reactos/subsystems/win32/win32k/objects/dcattr.c
    trunk/reactos/subsystems/win32/win32k/objects/dclife.c
    trunk/reactos/subsystems/win32/win32k/objects/dcobjs.c
    trunk/reactos/subsystems/win32/win32k/objects/dcstate.c
    trunk/reactos/subsystems/win32/win32k/objects/dibobj.c
    trunk/reactos/subsystems/win32/win32k/objects/drawing.c
    trunk/reactos/subsystems/win32/win32k/objects/fillshap.c
    trunk/reactos/subsystems/win32/win32k/objects/gdibatch.c
    trunk/reactos/subsystems/win32/win32k/objects/gdidbg.c
    trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c
    trunk/reactos/subsystems/win32/win32k/objects/gdipool.c
    trunk/reactos/subsystems/win32/win32k/objects/icm.c
    trunk/reactos/subsystems/win32/win32k/objects/palette.c
    trunk/reactos/subsystems/win32/win32k/objects/path.c
    trunk/reactos/subsystems/win32/win32k/objects/pen.c
    trunk/reactos/subsystems/win32/win32k/objects/region.c
    trunk/reactos/subsystems/win32/win32k/win32k.rbuild

[This mail would be too long, it was shortened to contain the URLs only.]

Modified: trunk/reactos/subsystems/win32/win32k/eng/driverobj.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/driverobj.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/eng/engbrush.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/engbrush.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/eng/engwindow.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/engwindow.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/pdevobj.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/eng/surface.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/surface.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/brush.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/brush.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/color.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/color.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/dc.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/dc.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/dib.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/dib.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/driverobj.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/driverobj.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/gdidebug.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/gdidebug.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/gdiobj.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/gdiobj.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/misc.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/misc.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/palette.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/palette.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/path.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/path.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/pen.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/pen.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/region.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/region.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/surface.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/surface.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/text.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/text.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/win32.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/win32.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/include/win32kp.h
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/win32kp.h?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/main/dllmain.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/main/dllmain.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntddraw/dxeng.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntddraw/dxeng.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/cursoricon.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/cursoricon.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/desktop.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/message.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/message.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/monitor.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/monitor.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/painting.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/painting.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/sysparams.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/sysparams.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/vis.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/vis.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/windc.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/windc.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/winsta.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/bitblt.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/bitblt.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/bitmaps.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/brush.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/brush.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/dcattr.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dcattr.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/dclife.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dclife.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/dcobjs.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dcobjs.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/dcstate.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dcstate.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/dibobj.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dibobj.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/drawing.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/drawing.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/fillshap.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/fillshap.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/gdibatch.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/gdibatch.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/gdidbg.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/gdidbg.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/gdipool.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/gdipool.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/icm.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/icm.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/palette.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/palette.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/path.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/path.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/pen.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/pen.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/objects/region.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/region.c?rev=51470&r1=51469&r2=51470&view=diff

Modified: trunk/reactos/subsystems/win32/win32k/win32k.rbuild
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/win32k.rbuild?rev=51470&r1=51469&r2=51470&view=diff


Reply via email to