Mike, Uwe, thanks for the quick reply! Now I got to the end of X11DRV_CreateDC (TRACEs added by me):
wine_tsx11_lock(); TRACE("physDev=%p\n", physDev); physDev->gc = XCreateGC( gdi_display, physDev->drawable, 0, NULL ); TRACE("XCreateGC returned %p\n", physDev->gc); XSetGraphicsExposures( gdi_display, physDev->gc, False ); XSetSubwindowMode( gdi_display, physDev->gc, IncludeInferiors ); XFlush( gdi_display ); wine_tsx11_unlock();
and --debugmsg +winetest,+dialog,+dc,+x11drv,+relay shows
trace:dc:CreateDCW (driver=L"DISPLAY", device=(null), output=(null)): returning 0x7c 000a:Call x11drv.CreateDC(40347978,40347990,40def154 L"DISPLAY",00000000,00000000,00000000) ret=40899405 000a:Call ntdll.RtlAllocateHeap(40300000,00000008,0000008c) ret=409ee0e1 000a:Ret ntdll.RtlAllocateHeap() retval=40347ab8 ret=409ee0e1 000a:Call gdi32.GetObjectType(0000007c) ret=409ee125 000a:Call kernel32._EnterSysLevel(408cf340) ret=408a5547 000a:Ret kernel32._EnterSysLevel() retval=0000000c ret=408a5547 000a:Call kernel32._LeaveSysLevel(408cf340) ret=408a56e3 000a:Ret kernel32._LeaveSysLevel() retval=00000000 ret=408a56e3 000a:Ret gdi32.GetObjectType() retval=00000003 ret=409ee125 000a:Call ntdll.RtlEnterCriticalSection(40a20700) ret=409fe910 000a:Ret ntdll.RtlEnterCriticalSection() retval=00000000 ret=409fe910 trace:x11drv:X11DRV_CreateDC physDev=0x40347ab8 0009:Ret kernel32.CreateThread() retval=00000040 ret=40593e07 trace:winetest:report thread 0x40 created 0009:Call kernel32.WaitForSingleObject(0000003c,ffffffff) ret=40593e4c [5 seconds of pause here] err:ntdll:RtlpWaitForCriticalSection section 0x40333ff8 "?" wait timed out in thread 000a, blocked by 0009, retrying (60 sec)
I am going to bed now, but can somebody advice me where to look further? To provide some context, the app goes like:
DWORD WINAPI DlgThreadProc () { InitCommonControls (); dialog = CreateDialog (GetModuleHandle (NULL), MAKEINTRESOURCE (IDD_STATUS), NULL, DlgProc);
[thread 000a is executing this CrateDialog call above] [...] }
[and here is the main thread (0009)]
DlgThread = CreateThread (NULL, 0, DlgThreadProc, NULL, 0, &DlgThreadID); WINE_TRACE ("thread %p created\n", DlgThread); ret = WaitForSingleObject (initEvent, INFINITE);
This multithread business is rather new for me, I would be grateful for any insights. The cross-compiled version runs on XP all right.
Feri.