Hi,
I have the following locking problem while printing from a 16bit application:
|Ret USER.34: ENABLEWINDOW() retval=0x0000 ret=0277:365e ds=027f
|Call GDI.38: ESCAPE(0x14f0,0x000a,0x0025,0x03875ef4,0x00000000) ret=0277:365e ds=027f
|trace:print:OpenJob16 'LPT1:' 'Der PC-Freiberufler: Ergebnisrechnung' 14f0
|trace:print:CreateSpoolFile Got printerSpoolCommand '/tmp/lp.out' for output device
|'LPT1:'
|trace:print:CreateSpoolFile Just assume it's a file
|trace:print:OpenJob16 return 0001
|trace:print:WriteSpool16 0001 4083acb0 00b2
|err:win32:_EnterSysLevel (0x400f50d8, level 1): Holding 0x406da3a8, level 3. Expect
|deadlock!
|CallTo16(func=0817:0000,ds=027f,0x14f0,0x0000) ss:sp=027f:a804
|err:win32:SYSLEVEL_CheckNotLevel (2): Holding lock of level 3!
|exception 0x80000003 at address 0x400c6d90, fs 257, pid 19082 ()
The program is calling ESCAPE(), which locks DC (level 3).
This in turn calls WINEPS.Escape(), which in turn calls WriteSpool, which
calls the 16 bit abortproc function.
I have not yet understood how to solve this problem, just unlocking
the DC appears to be unsafe.
Could someone please enlighten me (and probably offer a fix too :) ?
Thanks & Ciao, Marcus