From e9a4c2351d4317f214a51aa8de0740851ae45e04 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 22 Aug 2007 18:20:39 +0200 Subject: [PATCH] gdi32: Fix a few more places that use the wrong get/release function for DCs. --- dlls/gdi32/dc.c | 24 +++++++++++------------- dlls/gdi32/gdiobj.c | 14 ++++---------- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 4bf19b4bf12..a3689eb406a 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -200,7 +200,7 @@ BOOL DC_FreeDCPtr( DC *dc ) */ static BOOL DC_DeleteObject( HGDIOBJ handle, void *obj ) { - DC_ReleaseDCPtr( obj ); + GDI_ReleaseObj( handle ); return DeleteDC( handle ); } @@ -740,25 +740,23 @@ HDC WINAPI CreateICW( LPCWSTR driver, LPCWSTR device, LPCWSTR output, HDC WINAPI CreateCompatibleDC( HDC hdc ) { DC *dc, *origDC; - const DC_FUNCTIONS *funcs; - PHYSDEV physDev; + const DC_FUNCTIONS *funcs = NULL; + PHYSDEV physDev = NULL; GDI_CheckNotLock(); - if ((origDC = GDI_GetObjPtr( hdc, DC_MAGIC ))) + if ((origDC = DC_GetDCPtr( hdc ))) { - funcs = origDC->funcs; - physDev = origDC->physDev; + if (GetObjectType( hdc ) == OBJ_DC) + { + funcs = origDC->funcs; + physDev = origDC->physDev; + } DC_ReleaseDCPtr( origDC ); /* can't hold the lock while loading the driver */ - funcs = DRIVER_get_driver( funcs ); - } - else - { - funcs = DRIVER_load_driver( displayW ); - physDev = NULL; + if (funcs) funcs = DRIVER_get_driver( funcs ); } - if (!funcs) return 0; + if (!funcs && !(funcs = DRIVER_load_driver( displayW ))) return 0; if (!(dc = DC_AllocDC( funcs, MEMORY_DC_MAGIC ))) goto error; diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c index f2dd4e14c62..0388c71b941 100644 --- a/dlls/gdi32/gdiobj.c +++ b/dlls/gdi32/gdiobj.c @@ -528,15 +528,9 @@ static DWORD get_dpi( void ) * * Increment the reference count of a GDI object. */ -static inline void inc_ref_count( HGDIOBJ handle ) +static inline void inc_ref_count( GDIOBJHDR *header ) { - GDIOBJHDR *header; - - if ((header = GDI_GetObjPtr( handle, MAGIC_DONTCARE ))) - { - header->dwCount++; - GDI_ReleaseObj( handle ); - } + header->dwCount++; } @@ -829,7 +823,7 @@ BOOL WINAPI DeleteObject( HGDIOBJ obj ) { if(dc->funcs->pDeleteObject) dc->funcs->pDeleteObject( dc->physDev, obj ); - GDI_ReleaseObj( header->hdcs->hdc ); + DC_ReleaseDCPtr( dc ); } tmp = header->hdcs; header->hdcs = header->hdcs->next; @@ -1159,7 +1153,7 @@ HGDIOBJ WINAPI SelectObject( HDC hdc, HGDIOBJ hObj ) ret = header->funcs->pSelectObject( hObj, header, hdc ); if (ret && ret != hObj && HandleToULong(ret) > COMPLEXREGION) { - inc_ref_count( hObj ); + inc_ref_count( header ); dec_ref_count( ret ); } } -- 2.11.4.GIT