Module: wine Branch: master Commit: 58c6bab9c95c939774be59f9bc0b18b263deea8c URL: http://source.winehq.org/git/wine.git/?a=commit;h=58c6bab9c95c939774be59f9bc...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Sep 24 18:23:42 2007 +0200
gdi32: Don't hold the GDI lock while calling the driver printer functions.
---
dlls/gdi32/driver.c | 20 ++++++++---------- dlls/gdi32/printdrv.c | 50 +++++++++++++++++++++--------------------------- 2 files changed, 31 insertions(+), 39 deletions(-)
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index 465adc1..8dc14fe 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -497,7 +497,6 @@ INT WINAPI GDI_CallExtDeviceMode16( HWND hwnd, HDC hdc; DC *dc; INT ret = -1; - INT (*pExtDeviceMode)(LPSTR,HWND,LPDEVMODEA,LPSTR,LPSTR,LPDEVMODEA,LPSTR,DWORD);
TRACE("(%p, %p, %s, %s, %p, %s, %d)\n", hwnd, lpdmOutput, lpszDevice, lpszPort, lpdmInput, lpszProfile, fwMode ); @@ -511,13 +510,12 @@ INT WINAPI GDI_CallExtDeviceMode16( HWND hwnd,
if (!(hdc = CreateICA( buf, lpszDevice, lpszPort, NULL ))) return -1;
- if ((dc = DC_GetDCPtr( hdc ))) + if ((dc = get_dc_ptr( hdc ))) { - pExtDeviceMode = dc->funcs->pExtDeviceMode; - DC_ReleaseDCPtr( dc ); - if (pExtDeviceMode) - ret = pExtDeviceMode(buf, hwnd, lpdmOutput, lpszDevice, lpszPort, - lpdmInput, lpszProfile, fwMode); + if (dc->funcs->pExtDeviceMode) + ret = dc->funcs->pExtDeviceMode( buf, hwnd, lpdmOutput, lpszDevice, lpszPort, + lpdmInput, lpszProfile, fwMode ); + release_dc_ptr( dc ); } DeleteDC( hdc ); return ret; @@ -566,12 +564,12 @@ DWORD WINAPI GDI_CallDeviceCapabilities16( LPCSTR lpszDevice, LPCSTR lpszPort,
if (!(hdc = CreateICA( buf, lpszDevice, lpszPort, NULL ))) return -1;
- if ((dc = DC_GetDCPtr( hdc ))) + if ((dc = get_dc_ptr( hdc ))) { if (dc->funcs->pDeviceCapabilities) ret = dc->funcs->pDeviceCapabilities( buf, lpszDevice, lpszPort, fwCapability, lpszOutput, lpdm ); - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); } DeleteDC( hdc ); return ret; @@ -695,12 +693,12 @@ INT WINAPI ExtEscape( HDC hdc, INT nEscape, INT cbInput, LPCSTR lpszInData, INT cbOutput, LPSTR lpszOutData ) { INT ret = 0; - DC * dc = DC_GetDCPtr( hdc ); + DC * dc = get_dc_ptr( hdc ); if (dc) { if (dc->funcs->pExtEscape) ret = dc->funcs->pExtEscape( dc->physDev, nEscape, cbInput, lpszInData, cbOutput, lpszOutData ); - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); } return ret; } diff --git a/dlls/gdi32/printdrv.c b/dlls/gdi32/printdrv.c index 9444536..bdd754f 100644 --- a/dlls/gdi32/printdrv.c +++ b/dlls/gdi32/printdrv.c @@ -71,7 +71,7 @@ static const char Printers[] = "System\CurrentControlSet\Control\Pri INT WINAPI StartDocW(HDC hdc, const DOCINFOW* doc) { INT ret = 0; - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc );
TRACE("DocName = %s Output = %s Datatype = %s\n", debugstr_w(doc->lpszDocName), debugstr_w(doc->lpszOutput), @@ -80,7 +80,7 @@ INT WINAPI StartDocW(HDC hdc, const DOCINFOW* doc) if(!dc) return SP_ERROR;
if (dc->funcs->pStartDoc) ret = dc->funcs->pStartDoc( dc->physDev, doc ); - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); return ret; }
@@ -136,11 +136,11 @@ INT WINAPI StartDocA(HDC hdc, const DOCINFOA* doc) INT WINAPI EndDoc(HDC hdc) { INT ret = 0; - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc ); if(!dc) return SP_ERROR;
if (dc->funcs->pEndDoc) ret = dc->funcs->pEndDoc( dc->physDev ); - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); return ret; }
@@ -152,14 +152,14 @@ INT WINAPI EndDoc(HDC hdc) INT WINAPI StartPage(HDC hdc) { INT ret = 1; - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc ); if(!dc) return SP_ERROR;
if(dc->funcs->pStartPage) ret = dc->funcs->pStartPage( dc->physDev ); else FIXME("stub\n"); - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); return ret; }
@@ -170,19 +170,17 @@ INT WINAPI StartPage(HDC hdc) */ INT WINAPI EndPage(HDC hdc) { - ABORTPROC abort_proc; INT ret = 0; - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc ); if(!dc) return SP_ERROR;
if (dc->funcs->pEndPage) ret = dc->funcs->pEndPage( dc->physDev ); - abort_proc = dc->pAbortProc; - DC_ReleaseDCPtr( dc ); - if (abort_proc && !abort_proc( hdc, 0 )) + if (dc->pAbortProc && !dc->pAbortProc( hdc, 0 )) { EndDoc( hdc ); ret = 0; } + release_dc_ptr( dc ); return ret; }
@@ -193,11 +191,11 @@ INT WINAPI EndPage(HDC hdc) INT WINAPI AbortDoc(HDC hdc) { INT ret = 0; - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc ); if(!dc) return SP_ERROR;
if (dc->funcs->pAbortDoc) ret = dc->funcs->pAbortDoc( dc->physDev ); - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); return ret; }
@@ -214,19 +212,14 @@ BOOL16 WINAPI QueryAbort16(HDC16 hdc16, INT16 reserved) { BOOL ret = TRUE; HDC hdc = HDC_32( hdc16 ); - DC *dc = DC_GetDCPtr( hdc ); - ABORTPROC abproc; + DC *dc = get_dc_ptr( hdc );
if(!dc) { ERR("Invalid hdc %p\n", hdc); return FALSE; } - - abproc = dc->pAbortProc; - DC_ReleaseDCPtr( dc ); - - if (abproc) - ret = abproc(hdc, 0); + if (dc->pAbortProc) ret = dc->pAbortProc(hdc, 0); + release_dc_ptr( dc ); return ret; }
@@ -237,11 +230,11 @@ BOOL16 WINAPI QueryAbort16(HDC16 hdc16, INT16 reserved) static BOOL CALLBACK call_abort_proc16( HDC hdc, INT code ) { ABORTPROC16 proc16; - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc );
if (!dc) return FALSE; proc16 = dc->pAbortProc16; - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); if (proc16) { WORD args[2]; @@ -262,12 +255,13 @@ static BOOL CALLBACK call_abort_proc16( HDC hdc, INT code ) INT16 WINAPI SetAbortProc16(HDC16 hdc16, ABORTPROC16 abrtprc) { HDC hdc = HDC_32( hdc16 ); - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc );
if (!dc) return FALSE; dc->pAbortProc16 = abrtprc; - DC_ReleaseDCPtr( dc ); - return SetAbortProc( hdc, call_abort_proc16 ); + dc->pAbortProc = call_abort_proc16; + release_dc_ptr( dc ); + return TRUE; }
/********************************************************************** @@ -276,11 +270,11 @@ INT16 WINAPI SetAbortProc16(HDC16 hdc16, ABORTPROC16 abrtprc) */ INT WINAPI SetAbortProc(HDC hdc, ABORTPROC abrtprc) { - DC *dc = DC_GetDCPtr( hdc ); + DC *dc = get_dc_ptr( hdc );
if (!dc) return FALSE; dc->pAbortProc = abrtprc; - DC_ReleaseDCPtr( dc ); + release_dc_ptr( dc ); return TRUE; }