http://bugs.winehq.org/show_bug.cgi?id=22978
Summary: SimCity2000: race condition causes crash in MCI during startup Product: Wine Version: unspecified Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: winmm&mci AssignedTo: wine-bugs@winehq.org ReportedBy: hoehle@users.sourceforge.net
Created an attachment (id=28457) --> (http://bugs.winehq.org/attachment.cgi?id=28457) mci+winmm trace & crash backtrace
The attached log shows a crash that is triggered because the asynchronous mciseq/mcimidi player is still attempting to open the device while the main thread already successfully called MCI_CLOSE. The mcimidi player does not implement proper locking. Unlike mciwave, its state variable is not yet set to MCI_MODE_PLAY when opening the MIDI device, which lets MCI_CLOSE not see something is busy playing. Actually, even looking at mciwave, one can construct unfortunate sequences of scheduling that would cause mciwave to hang in such a situation. So there's no trivial patch simply moving wmm->dwStatus = MCI_MODE_PLAY; a couple of lines up.
The crash generally occurs when starting SimCity 2000 using "wine 'C:\Program...\Game\simcity.exe'" Curiously, "wine start simcity.exe" always works. As I said, it's a race condition. It seems like sometimes, the initialisation of WINMM and MIDI takes a long time. The bug is then triggered when MCI_CLOSE is called by the application.
MCI_CLOSE is called, among others, when clicking "exit" in the initial menu. Often enough, the app crashes before showing this menu. IMHO, the fact that the app calls MCI_CLOSE that early is triggered by another bug in Wine that AppDB testers have mentioned every now and often, but never put to Bugzilla: SimCity 2000 starts fine (showing its logo) when using full screen mode, but needs a resize or uniconify when using a virtual desktop: then presumably, the app sends MCI_CLOSE to stop the music, causing or not a crash via the present race condition. BTW, since the crash occurs in the asynchronous MCI MIDI player, the app nevertheless works...
This issue has nothing to do with the bug, presumably in the app, that "wine simcity.exe" crashes whereas "wine 'c:\full\path\simcity.exe'" (should) work.