http://bugs.winehq.org/show_bug.cgi?id=22624
Summary: multithread app using GDI and directx may cause deadlock Product: Wine Version: 1.1.44 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: major Priority: P2 Component: directx-d3d AssignedTo: wine-bugs@winehq.org ReportedBy: drangon.mail@gmail.com
multithread app using GDI and directx may cause deadlock
suppose thread A calling StretchDIBits() while thread B calling DirectDrawCreateEx().
In thread A, StrentchDIBits() will first call GDI_GetObjPtr() in which enter critical section "gdi_section", then call the X11DRV function in which enter critical section "X11DRV_CritSection".
In thread B, DirectDrawCreateEx() will call test_pbo_functionality(), in this function, first call ENTER_GL() which enter critical section "X11DRV_CritSection", then call wglFinish() ( actuall function is X11DRV_wglFinish() ), then call ExtEscape(), then call get_dc_ptr(), in which enter critical section "gdi_section".
Then this two thread may hold one critical section and wait for another, then cause deadlock.