Alexandre Julliard : gdi32: Increment the reference count for the initial DC stock objects.

Alexandre Julliard julliard at winehq.org
Fri Jan 30 07:58:01 CST 2009


Module: wine
Branch: master
Commit: 827e1f1de337ee180b46bf65c015da5164ae7e1f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=827e1f1de337ee180b46bf65c015da5164ae7e1f

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Jan 29 16:25:58 2009 +0100

gdi32: Increment the reference count for the initial DC stock objects.

---

 dlls/gdi32/dc.c          |   10 +++++-----
 dlls/gdi32/gdi_private.h |    2 +-
 dlls/gdi32/gdiobj.c      |    6 ++++--
 3 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 3648f64..2032dfa 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -103,9 +103,9 @@ DC *alloc_dc_ptr( const DC_FUNCTIONS *funcs, WORD magic )
     dc->hMetaRgn            = 0;
     dc->hMetaClipRgn        = 0;
     dc->hVisRgn             = 0;
-    dc->hPen                = GetStockObject( BLACK_PEN );
-    dc->hBrush              = GetStockObject( WHITE_BRUSH );
-    dc->hFont               = GetStockObject( SYSTEM_FONT );
+    dc->hPen                = GDI_inc_ref_count( GetStockObject( BLACK_PEN ));
+    dc->hBrush              = GDI_inc_ref_count( GetStockObject( WHITE_BRUSH ));
+    dc->hFont               = GDI_inc_ref_count( GetStockObject( SYSTEM_FONT ));
     dc->hBitmap             = 0;
     dc->hDevice             = 0;
     dc->hPalette            = GetStockObject( DEFAULT_PALETTE );
@@ -680,7 +680,7 @@ HDC WINAPI CreateDCW( LPCWSTR driver, LPCWSTR device, LPCWSTR output,
     if (!(dc = alloc_dc_ptr( funcs, OBJ_DC ))) goto error;
     hdc = dc->hSelf;
 
-    dc->hBitmap = GetStockObject( DEFAULT_BITMAP );
+    dc->hBitmap = GDI_inc_ref_count( GetStockObject( DEFAULT_BITMAP ));
     if (!(dc->hVisRgn = CreateRectRgn( 0, 0, 1, 1 ))) goto error;
 
     TRACE("(driver=%s, device=%s, output=%s): returning %p\n",
@@ -797,7 +797,7 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
 
     TRACE("(%p): returning %p\n", hdc, dc->hSelf );
 
-    dc->hBitmap = GetStockObject( DEFAULT_BITMAP );
+    dc->hBitmap = GDI_inc_ref_count( GetStockObject( DEFAULT_BITMAP ));
     if (!(dc->hVisRgn = CreateRectRgn( 0, 0, 1, 1 ))) goto error;   /* default bitmap is 1x1 */
 
     /* Copy the driver-specific physical device info into
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 87d4ec0..f4c2d02 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -442,7 +442,7 @@ extern void *free_gdi_handle( HGDIOBJ handle ) DECLSPEC_HIDDEN;
 extern void *GDI_GetObjPtr( HGDIOBJ, WORD ) DECLSPEC_HIDDEN;
 extern void GDI_ReleaseObj( HGDIOBJ ) DECLSPEC_HIDDEN;
 extern void GDI_CheckNotLock(void) DECLSPEC_HIDDEN;
-extern BOOL GDI_inc_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
+extern HGDIOBJ GDI_inc_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
 extern BOOL GDI_dec_ref_count( HGDIOBJ handle ) DECLSPEC_HIDDEN;
 extern BOOL GDI_hdc_using_object(HGDIOBJ obj, HDC hdc) DECLSPEC_HIDDEN;
 extern BOOL GDI_hdc_not_using_object(HGDIOBJ obj, HDC hdc) DECLSPEC_HIDDEN;
diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c
index 5557787..b4ca4d9 100644
--- a/dlls/gdi32/gdiobj.c
+++ b/dlls/gdi32/gdiobj.c
@@ -522,7 +522,7 @@ static DWORD get_dpi( void )
  *
  * Increment the reference count of a GDI object.
  */
-BOOL GDI_inc_ref_count( HGDIOBJ handle )
+HGDIOBJ GDI_inc_ref_count( HGDIOBJ handle )
 {
     GDIOBJHDR *header;
 
@@ -531,7 +531,9 @@ BOOL GDI_inc_ref_count( HGDIOBJ handle )
         header->dwCount++;
         GDI_ReleaseObj( handle );
     }
-    return header != NULL;
+    else handle = 0;
+
+    return handle;
 }
 
 




More information about the wine-cvs mailing list