http://bugs.winehq.org/show_bug.cgi?id=11987
Summary: RtlpWaitForCriticalSection timeout in NeedForSpeed III Product: Wine Version: 0.9.57. Platform: PC OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll AssignedTo: wine-bugs@winehq.org ReportedBy: luis.montes@dslextreme.com
Created an attachment (id=11312) --> (http://bugs.winehq.org/attachment.cgi?id=11312) patch changing the RtlpWaitForCriticalSection in dlls/ntdll/critsection.c to look for exit thread status
When trying to play Need for Speed III, Hot Pursuit, the screen freezes about 3 out of 4 tries at startup for about 5 min before closing. Upon exit, the terminal shows an error: err:ntdll:RtlpWaitForCriticalSection section 0x7efec984 "loader.c: loader_section" wait timed out in thread 001d, blocked by 001b, retrying (60 sec)
By running with WINEDEBUG=+relay I found out that the thread 001b seems to have exit, but apparently it never released the critical section, thus the error. I hunted down the place where the message is printed and if I modify the code to look in the dead thread's exit status for anything other than STILL_ACTIVE then the program always starts (but I still can't get -d3d0 to use hardware acceleration at a decent rate |-(
After playing for a while with this patch in, upon exit I find the following: err:ntdll:RtlpWaitForCriticalSection section 0x60041bd0 "?" wait timed out in thread 0022, blocked by 0009, retrying (60 sec) err:ntdll:RtlpWaitForCriticalSection section 0x60041bb8 "?" wait timed out in thread 0022, blocked by 0021, retrying (60 sec) err:ntdll:RtlpWaitForCriticalSection section 0x60041bd0 "?" wait timed out in thread 0009, blocked by 0022, retrying (60 sec)
I think that implies that the threads are now getting confused because I did not *released* the critical section held by the dead thread, the new thread got the critical section along with the dead, and who knows what's wineserver thinking about that. Anybody has any ideas how to properly fix it?