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.