#define MAX_LARGE_HANDLES ((GDI_HEAP_SIZE >> 2) - FIRST_LARGE_HANDLE)
static GDIOBJHDR *large_handles[MAX_LARGE_HANDLES];
static int next_large_handle;
+static LONG debug_count;
static const char *gdi_obj_type( unsigned type )
{
large_handles[i] = obj;
next_large_handle = i;
LeaveCriticalSection( &gdi_section );
+ TRACE( "allocated %s %p %u/%u\n",
+ gdi_obj_type(type), (HGDIOBJ)(ULONG_PTR)((i + FIRST_LARGE_HANDLE) << 2),
+ InterlockedIncrement( &debug_count ), MAX_LARGE_HANDLES );
return (HGDIOBJ)(ULONG_PTR)((i + FIRST_LARGE_HANDLE) << 2);
}
}
if (object)
{
+ TRACE( "freed %s %p %u/%u\n", gdi_obj_type( object->type ), handle,
+ InterlockedDecrement( &debug_count ) + 1, MAX_LARGE_HANDLES );
object->type = 0; /* mark it as invalid */
object->funcs = NULL;
}
LeaveCriticalSection( &gdi_section );
WARN( "Invalid handle %p\n", handle );
}
- else TRACE("(%p): enter %d\n", handle, gdi_section.RecursionCount);
return ptr;
}
*/
void GDI_ReleaseObj( HGDIOBJ handle )
{
- TRACE("(%p): leave %d\n", handle, gdi_section.RecursionCount);
LeaveCriticalSection( &gdi_section );
}
if(dc)
{
- if(dc->funcs->pDeleteObject)
- {
- GDI_ReleaseObj( obj ); /* release the GDI lock */
- dc->funcs->pDeleteObject( dc->physDev, obj );
- header = GDI_GetObjPtr( obj, 0 ); /* and grab it again */
- }
+ PHYSDEV physdev = GET_DC_PHYSDEV( dc, pDeleteObject );
+ GDI_ReleaseObj( obj ); /* release the GDI lock */
+ physdev->funcs->pDeleteObject( physdev, obj );
+ header = GDI_GetObjPtr( obj, 0 ); /* and grab it again */
release_dc_ptr( dc );
}
HeapFree(GetProcessHeap(), 0, hdcs_head);
{
DC *dc = get_dc_ptr(hdc);
BOOL ret = FALSE;
+
if(dc)
{
- if (dc->funcs->pGdiComment)
- ret = dc->funcs->pGdiComment( dc->physDev, cbSize, lpData );
+ PHYSDEV physdev = GET_DC_PHYSDEV( dc, pGdiComment );
+ ret = physdev->funcs->pGdiComment( physdev, cbSize, lpData );
release_dc_ptr( dc );
}
return ret;