Commit 88e01969 authored by Alexandre Julliard's avatar Alexandre Julliard

gdi32: Move freeing of the DC path and regions into free_dc_ptr.

parent 4ea0b382
...@@ -165,6 +165,11 @@ BOOL free_dc_ptr( DC *dc ) ...@@ -165,6 +165,11 @@ BOOL free_dc_ptr( DC *dc )
{ {
assert( dc->refcount == 1 ); assert( dc->refcount == 1 );
if (free_gdi_handle( dc->hSelf ) != dc) return FALSE; /* shouldn't happen */ if (free_gdi_handle( dc->hSelf ) != dc) return FALSE; /* shouldn't happen */
if (dc->hClipRgn) DeleteObject( dc->hClipRgn );
if (dc->hMetaRgn) DeleteObject( dc->hMetaRgn );
if (dc->hMetaClipRgn) DeleteObject( dc->hMetaClipRgn );
if (dc->hVisRgn) DeleteObject( dc->hVisRgn );
PATH_DestroyGdiPath( &dc->path );
return HeapFree( GetProcessHeap(), 0, dc ); return HeapFree( GetProcessHeap(), 0, dc );
} }
...@@ -624,8 +629,7 @@ BOOL WINAPI RestoreDC( HDC hdc, INT level ) ...@@ -624,8 +629,7 @@ BOOL WINAPI RestoreDC( HDC hdc, INT level )
* returning FALSE but still destroying the saved DC state */ * returning FALSE but still destroying the saved DC state */
success=FALSE; success=FALSE;
} }
release_dc_ptr( dcs ); free_dc_ptr( dcs );
DeleteDC( hdcs );
} }
release_dc_ptr( dc ); release_dc_ptr( dc );
return success; return success;
...@@ -684,7 +688,6 @@ HDC WINAPI CreateDCW( LPCWSTR driver, LPCWSTR device, LPCWSTR output, ...@@ -684,7 +688,6 @@ HDC WINAPI CreateDCW( LPCWSTR driver, LPCWSTR device, LPCWSTR output,
return hdc; return hdc;
error: error:
if (dc && dc->hVisRgn) DeleteObject( dc->hVisRgn );
if (dc) free_dc_ptr( dc ); if (dc) free_dc_ptr( dc );
DRIVER_release_driver( funcs ); DRIVER_release_driver( funcs );
return 0; return 0;
...@@ -801,7 +804,6 @@ HDC WINAPI CreateCompatibleDC( HDC hdc ) ...@@ -801,7 +804,6 @@ HDC WINAPI CreateCompatibleDC( HDC hdc )
return ret; return ret;
error: error:
if (dc && dc->hVisRgn) DeleteObject( dc->hVisRgn );
if (dc) free_dc_ptr( dc ); if (dc) free_dc_ptr( dc );
DRIVER_release_driver( funcs ); DRIVER_release_driver( funcs );
return 0; return 0;
...@@ -842,11 +844,6 @@ BOOL WINAPI DeleteDC( HDC hdc ) ...@@ -842,11 +844,6 @@ BOOL WINAPI DeleteDC( HDC hdc )
if (!(dcs = get_dc_ptr( hdcs ))) break; if (!(dcs = get_dc_ptr( hdcs ))) break;
dc->saved_dc = dcs->saved_dc; dc->saved_dc = dcs->saved_dc;
dc->saveLevel--; dc->saveLevel--;
if (dcs->hClipRgn) DeleteObject( dcs->hClipRgn );
if (dcs->hMetaRgn) DeleteObject( dcs->hMetaRgn );
if (dcs->hMetaClipRgn) DeleteObject( dcs->hMetaClipRgn );
if (dcs->hVisRgn) DeleteObject( dcs->hVisRgn );
PATH_DestroyGdiPath(&dcs->path);
free_dc_ptr( dcs ); free_dc_ptr( dcs );
} }
...@@ -868,11 +865,6 @@ BOOL WINAPI DeleteDC( HDC hdc ) ...@@ -868,11 +865,6 @@ BOOL WINAPI DeleteDC( HDC hdc )
HeapFree( GetProcessHeap(), 0, dc->saved_visrgn ); HeapFree( GetProcessHeap(), 0, dc->saved_visrgn );
dc->saved_visrgn = next; dc->saved_visrgn = next;
} }
if (dc->hClipRgn) DeleteObject( dc->hClipRgn );
if (dc->hMetaRgn) DeleteObject( dc->hMetaRgn );
if (dc->hMetaClipRgn) DeleteObject( dc->hMetaClipRgn );
if (dc->hVisRgn) DeleteObject( dc->hVisRgn );
PATH_DestroyGdiPath(&dc->path);
free_dc_ptr( dc ); free_dc_ptr( dc );
if (funcs) DRIVER_release_driver( funcs ); /* do that after releasing the GDI lock */ if (funcs) DRIVER_release_driver( funcs ); /* do that after releasing the GDI lock */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment