http://bugs.winehq.org/show_bug.cgi?id=24326
Summary: Everquest 2 Extended crashes in DSOUND_PrimaryOpen Product: Wine Version: 1.3.2 Platform: x86 OS/Version: Linux Status: NEW Severity: normal Priority: P2 Component: -unknown AssignedTo: wine-bugs@winehq.org ReportedBy: dank@kegel.com
On my PC, I booted into Windows, installed EQ2, booted into Ubuntu 10.04, and then did rm -rf .wine sh winetricks gecko sudo mkdir /media/win sudo mount -o ro /dev/sda1 /media/win cd ~/.wine/drive_c mkdir ProgramData cp -a "/media/win/ProgramData/Sony Online Entertainment" ProgramData cd "ProgramData/Sony Online Entertainment/Installed Games/EverQuest II Extended" wine EverQuest2.exe
This crashed fairly quickly with
Unhandled exception: page fault on read access to 0xb515e5d0 in 32-bit code (0xb515e5d0). Backtrace: =>0 0xb515e5d0 1 SetFormat+0x3a7(This=0x1fcac0, pwfx=<?>) [dlls/winealsa.drv/dsoutput.c:235] 2 SetFormat+0x3a7(This=0xb55babf9, pwfx=<?>) [dlls/winealsa.drv/dsoutput.c:235] 3 IDsDriverImpl_CreateSoundBuffer+0x192(iface=0x1fcaa8, pwfx=0x1fca38, dwFlags=<?>, dwCardAddress=0, pdwcbBufferSize=0x1fc91c, ppbBuffer=0x1fc914, ppvObj=0x1fc910) [dlls/winealsa.drv/dsoutput.c:886] 4 DSOUND_PrimaryOpen+0xa8(device=0x1fc658) [dlls/dsound/primary.c:167] 5 DSOUND_PrimaryCreate+0x3a(device=0x1fc658) [dlls/dsound/primary.c:325] 6 DirectSoundDevice_Initialize+0x744(ppDevice=0x1fc624, lpcGUID=<?>) [dlls/dsound/dsound.c:1473]
Happily, commenting out line 235 in dsoutput.c worked around the crash and let the game play:
--- a/dlls/winealsa.drv/dsoutput.c +++ b/dlls/winealsa.drv/dsoutput.c @@ -232,7 +232,7 @@ static int DSDB_CreateMMAP(IDsDriverBufferImpl* pdbi) snd_pcm_sw_params_set_start_threshold(pcm, sw_params, 0); snd_pcm_sw_params_get_boundary(sw_params, &boundary); snd_pcm_sw_params_set_stop_threshold(pcm, sw_params, boundary); - snd_pcm_sw_params_set_silence_threshold(pcm, sw_params, boundary); + //snd_pcm_sw_params_set_silence_threshold(pcm, sw_params, boundary); snd_pcm_sw_params_set_silence_size(pcm, sw_params, 0); snd_pcm_sw_params_set_avail_min(pcm, sw_params, 0); err = snd_pcm_sw_params(pcm, sw_params);