mirror of
https://github.com/reactos/reactos.git
synced 2024-10-06 09:24:11 +00:00
clean-up work on my GDIOBJ lock/unlock tracing/debugging
svn path=/trunk/; revision=5400
This commit is contained in:
parent
1ddb9c245b
commit
bd3999379b
|
@ -19,7 +19,7 @@
|
||||||
/*
|
/*
|
||||||
* GDIOBJ.C - GDI object manipulation routines
|
* GDIOBJ.C - GDI object manipulation routines
|
||||||
*
|
*
|
||||||
* $Id: gdiobj.c,v 1.31 2003/08/01 20:54:03 royce Exp $
|
* $Id: gdiobj.c,v 1.32 2003/08/04 00:24:07 royce Exp $
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ GDIOBJ_FreeObj(HGDIOBJ hObj, WORD Magic, DWORD Flag)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
objectHeader = (PGDIOBJHDR) handleEntry->pObject;
|
objectHeader = handleEntry->pObject;
|
||||||
ASSERT(objectHeader);
|
ASSERT(objectHeader);
|
||||||
DPRINT("FreeObj: locks: %x\n", objectHeader->dwCount );
|
DPRINT("FreeObj: locks: %x\n", objectHeader->dwCount );
|
||||||
if( !(Flag & GDIOBJFLAG_IGNORELOCK) ){
|
if( !(Flag & GDIOBJFLAG_IGNORELOCK) ){
|
||||||
|
@ -314,10 +314,8 @@ GDIOBJ_FreeObj(HGDIOBJ hObj, WORD Magic, DWORD Flag)
|
||||||
bRet = IconCursor_InternalDelete( (PICONCURSOROBJ) Obj );
|
bRet = IconCursor_InternalDelete( (PICONCURSOROBJ) Obj );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
handleEntry->hProcessId = 0;
|
|
||||||
ExFreePool (handleEntry->pObject);
|
ExFreePool (handleEntry->pObject);
|
||||||
handleEntry->pObject = 0;
|
memset ( handleEntry, 0, sizeof(GDI_HANDLE_ENTRY) );
|
||||||
handleEntry->wMagic = 0;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -555,8 +553,8 @@ VOID STDCALL
|
||||||
W32kDumpGdiObjects( INT Process )
|
W32kDumpGdiObjects( INT Process )
|
||||||
{
|
{
|
||||||
DWORD i;
|
DWORD i;
|
||||||
PGDI_HANDLE_ENTRY handleEntry;
|
PGDI_HANDLE_ENTRY handleEntry;
|
||||||
PGDIOBJHDR objectHeader;
|
PGDIOBJHDR objectHeader;
|
||||||
|
|
||||||
for( i=1; i < GDI_HANDLE_NUMBER; i++ ){
|
for( i=1; i < GDI_HANDLE_NUMBER; i++ ){
|
||||||
handleEntry = GDIOBJ_iGetHandleEntryForIndex ((WORD) i & 0xffff);
|
handleEntry = GDIOBJ_iGetHandleEntryForIndex ((WORD) i & 0xffff);
|
||||||
|
@ -575,23 +573,34 @@ W32kDumpGdiObjects( INT Process )
|
||||||
PGDIOBJ FASTCALL
|
PGDIOBJ FASTCALL
|
||||||
GDIOBJ_LockObjDbg ( const char* file, int line, HGDIOBJ hObj, WORD Magic )
|
GDIOBJ_LockObjDbg ( const char* file, int line, HGDIOBJ hObj, WORD Magic )
|
||||||
{
|
{
|
||||||
PGDIOBJ rc;
|
PGDIOBJ rc;
|
||||||
PGDI_HANDLE_ENTRY handleEntry
|
PGDI_HANDLE_ENTRY handleEntry
|
||||||
= GDIOBJ_iGetHandleEntryForIndex ( GDI_HANDLE2INDEX(hObj) );
|
= GDIOBJ_iGetHandleEntryForIndex ( GDI_HANDLE2INDEX(hObj) );
|
||||||
if ( handleEntry->lockfile )
|
if ( handleEntry == 0
|
||||||
{
|
|| (handleEntry->wMagic != Magic && Magic != GO_MAGIC_DONTCARE )
|
||||||
DbgPrint("Caution! GDIOBJ_LockObj trying to lock object (0x%x) second time\n", hObj );
|
|| (handleEntry->hProcessId != (HANDLE)0xFFFFFFFF
|
||||||
DbgPrint("\tcalled from: %s:%i\n", file, line );
|
&& handleEntry->hProcessId != PsGetCurrentProcessId ()
|
||||||
DbgPrint("\tpreviously locked from: %s:%i\n", handleEntry->lockfile, handleEntry->lockline );
|
)
|
||||||
}
|
)
|
||||||
//DbgPrint("(%s:%i) GDIOBJ_LockObj(0x%x,0x%x)\n", file, line, hObj, Magic );
|
{
|
||||||
rc = GDIOBJ_LockObj(hObj,Magic);
|
DPRINT1("GDIBOJ_LockObj failed for %d, magic: %d, reqMagic\n",(WORD) hObj & 0xffff, handleEntry->wMagic, Magic);
|
||||||
if ( rc && !handleEntry->lockfile )
|
DPRINT1("\tcalled from: %s:%i\n", file, line );
|
||||||
{
|
return NULL;
|
||||||
handleEntry->lockfile = file;
|
}
|
||||||
handleEntry->lockline = line;
|
if ( handleEntry->lockfile )
|
||||||
}
|
{
|
||||||
return rc;
|
DPRINT1("Caution! GDIOBJ_LockObj trying to lock object (0x%x) second time\n", hObj );
|
||||||
|
DPRINT1("\tcalled from: %s:%i\n", file, line );
|
||||||
|
DPRINT1("\tpreviously locked from: %s:%i\n", handleEntry->lockfile, handleEntry->lockline );
|
||||||
|
}
|
||||||
|
//DbgPrint("(%s:%i) GDIOBJ_LockObj(0x%x,0x%x)\n", file, line, hObj, Magic );
|
||||||
|
rc = GDIOBJ_LockObj(hObj,Magic);
|
||||||
|
if ( rc && !handleEntry->lockfile )
|
||||||
|
{
|
||||||
|
handleEntry->lockfile = file;
|
||||||
|
handleEntry->lockline = line;
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
#endif//GDIOBJ_LockObj
|
#endif//GDIOBJ_LockObj
|
||||||
|
|
||||||
|
@ -600,12 +609,23 @@ GDIOBJ_LockObjDbg ( const char* file, int line, HGDIOBJ hObj, WORD Magic )
|
||||||
BOOL FASTCALL
|
BOOL FASTCALL
|
||||||
GDIOBJ_UnlockObjDbg ( const char* file, int line, HGDIOBJ hObj, WORD Magic )
|
GDIOBJ_UnlockObjDbg ( const char* file, int line, HGDIOBJ hObj, WORD Magic )
|
||||||
{
|
{
|
||||||
PGDI_HANDLE_ENTRY handleEntry
|
PGDI_HANDLE_ENTRY handleEntry
|
||||||
= GDIOBJ_iGetHandleEntryForIndex ( GDI_HANDLE2INDEX(hObj) );
|
= GDIOBJ_iGetHandleEntryForIndex ( GDI_HANDLE2INDEX(hObj) );
|
||||||
//DbgPrint("(%s:%i) GDIOBJ_UnlockObj(0x%x,0x%x)\n", file, line, hObj, Magic );
|
if ( handleEntry == 0
|
||||||
handleEntry->lockfile = NULL;
|
|| (handleEntry->wMagic != Magic && Magic != GO_MAGIC_DONTCARE )
|
||||||
handleEntry->lockline = 0;
|
|| (handleEntry->hProcessId != (HANDLE)0xFFFFFFFF
|
||||||
return GDIOBJ_UnlockObj(hObj,Magic);
|
&& handleEntry->hProcessId != PsGetCurrentProcessId ()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
{
|
||||||
|
DPRINT1("GDIBOJ_UnlockObj failed for %d, magic: %d, reqMagic\n",(WORD) hObj & 0xffff, handleEntry->wMagic, Magic );
|
||||||
|
DPRINT1("\tcalled from: %s:%i\n", file, line );
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
//DbgPrint("(%s:%i) GDIOBJ_UnlockObj(0x%x,0x%x)\n", file, line, hObj, Magic );
|
||||||
|
handleEntry->lockfile = NULL;
|
||||||
|
handleEntry->lockline = 0;
|
||||||
|
return GDIOBJ_UnlockObj(hObj,Magic);
|
||||||
}
|
}
|
||||||
#endif//GDIOBJ_LockObj
|
#endif//GDIOBJ_LockObj
|
||||||
|
|
||||||
|
@ -635,7 +655,7 @@ GDIOBJ_LockObj( HGDIOBJ hObj, WORD Magic )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DPRINT("GDIBOJ_LockObj failed for %d, magic: %d, reqMagic\n",(WORD) hObj & 0xffff, handleEntry->wMagic, Magic);
|
DPRINT1("GDIBOJ_LockObj failed for %d, magic: %d, reqMagic\n",(WORD) hObj & 0xffff, handleEntry->wMagic, Magic);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -681,7 +701,7 @@ GDIOBJ_UnlockObj( HGDIOBJ hObj, WORD Magic )
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DPRINT( "GDIOBJ_UnLockObj: failed\n");
|
DPRINT1( "GDIOBJ_UnLockObj: failed\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue