Alexandre Julliard : gdi32: Don' t hold the GDI lock while calling the driver printer functions.
Alexandre Julliard
julliard at winehq.org
Tue Sep 25 07:50:46 CDT 2007
Module: wine
Branch: master
Commit: 58c6bab9c95c939774be59f9bc0b18b263deea8c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=58c6bab9c95c939774be59f9bc0b18b263deea8c
Author: Alexandre Julliard <julliard at 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;
}
More information about the wine-cvs
mailing list