RtlpWaitForCriticalSection

Luis A. Montes luis.montes at dslextreme.com
Sat Dec 29 14:35:01 CST 2007


I got a game (Need for speed III) that has been reported to work by
others. On my computer, though, the game hangs at different places about
50% of the time. I compiled Wine 0.9.51 from source on a Slackware 12.0
dual core Athlon, and although I'm sure most people this days buy at
least that kind of computer, maybe that was not true when the reports
came out. What I'm thinking is that this is a race condition brought out
because of the two cores. I think that because if I run inside gdb I
catch a SIGTERM going to a thread that then exits. Another thread then
prints the:
err:ntdll:RtlpWaitForCriticalSection section ... wait timed out in
thread ..., blocked by <dead_thread>, retrying (60 sec)

I see three ways to fix this problem:
- When a thread dies, release the locks it has. Of course this wouldn't
be compatible with windows, but perhaps a command line option could
activate that code. In any case I could try something like that for this
game in particular. I'm looking for some pointers on where should I
start looking.
- Looking into why the thread is getting a SIGTERM in the first place.
Perhaps there is a way to delay the signal from being sent in a
reasonable way? Who would be sending it?
- Run the game in a single core (setting the affinity?) It just occur to
me that I should be able to set the affinity on a bash shell and then
start wine from there. I'll try that.




More information about the wine-devel mailing list