http://bugs.winehq.org/show_bug.cgi?id=28693
Bug #: 28693 Summary: Old version Bass.dll fails to load Product: Wine Version: 1.3.30 Platform: x86 OS/Version: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: directx-dsound AssignedTo: wine-bugs@winehq.org ReportedBy: jiashulu@gmail.com Classification: Unclassified
I have trouble playing an old game which uses the audio library Bass.dll.
After typing "wine rpg.exe", nothing happens for a while and then an error occurs:
err:ntdll:RtlpWaitForCriticalSection section 0x7efec904 "/var/tmp/portage/app-emulation/wine-9999/work/wine-9999/dlls/ntdll/loader.c: loader_section" wait timed out in thread 0028, blocked by 0009, retrying (60 sec)
It seems that Bass.dll calls to DirectSoundEnumerate in its Dllmain and something goes wrong.
An old version of Bass.dll can be downloaded from its homepage: http://www.un4seen.com/download.php?bass08 There are also some test programs for Bass.dll in the package above. They all fail to start under wine but work all right under windows.
http://bugs.winehq.org/show_bug.cgi?id=28693
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download URL| |http://www.un4seen.com/down | |load.php?bass08
http://bugs.winehq.org/show_bug.cgi?id=28693
Andrew Nguyen arethusa26@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1
--- Comment #1 from Andrew Nguyen arethusa26@gmail.com 2011-10-15 02:07:44 CDT --- I see the problem in wine-1.3.30-102-g8f8e86e with the supplied sample application mo3.exe. A deadlock occurs when bass.dll's DllMain in the DLL_PROCESS_ATTACH notification calls DirectSoundEnumerateA, causing it to indirectly wait on a thread which itself is waiting to take the loader critical section:
Backtrace: =>0 0x68001230 _dl_sysinfo_int80() in ld-linux.so.2 (0x0033eee0) ... 4 0x7b86fab4 WaitForMultipleObjects+0x39(count=0x2, handles=0x33f2fc, wait_all=0, timeout=0xffffffff) [/home/arethusa/wine32-unoptimized/dlls/kernel32/../../../wine.git/dlls/kernel32/sync.c:148] in kernel32 (0x0033f2d0) 5 0x68b7e54c get_mmdevenum+0x10f() [/home/arethusa/wine32-unoptimized/dlls/dsound/../../../wine.git/dlls/dsound/dsound_main.c:266] in dsound (0x0033f310) 6 0x68b7eda5 enumerate_mmdevices+0x19(flow=eRender, guids=0x68ba6d40, cb=0x68b7e9cc, user=0x33f408) [/home/arethusa/wine32-unoptimized/dlls/dsound/../../../wine.git/dlls/dsound/dsound_main.c:496] in dsound (0x0033f3a0) 7 0x68b7f2e6 DirectSoundEnumerateW+0xe7(lpDSEnumCallback=0x68b7e9cc, lpContext=0x33f408) [/home/arethusa/wine32-unoptimized/dlls/dsound/../../../wine.git/dlls/dsound/dsound_main.c:595] in dsound (0x0033f3f0) 8 0x68b7eb17 DirectSoundEnumerateA+0x88(lpDSEnumCallback=0x1001a6e0, lpContext=0x0(nil)) [/home/arethusa/wine32-unoptimized/dlls/dsound/../../../wine.git/dlls/dsound/dsound_main.c:429] in dsound (0x0033f420) 9 0x1001c65c in bass (+0x1c65b) (0x0033fd14) 10 0x1001c4f5 in bass (+0x1c4f4) (0x0033fd38) 11 0x7bc4c499 call_dll_entry_point+0x14() in ntdll (0x0033fd58) 12 0x7bc4e756 MODULE_InitDLL+0x200(wm=0x111298, reason=0x1, lpReserved=0x1) [/home/arethusa/wine32-unoptimized/dlls/ntdll/../../../wine.git/dlls/ntdll/loader.c:978] in ntdll (0x0033fec8) ...
The sample application does work on Windows 7. I don't have any good ideas on how to fix the issue, as there is no obvious place in dsound to defer the get_mmdevenum() initialization such that it does not occur when the loader critical section is held yet with DirectSoundEnumerateA reporting non-fake information when bass.dll loads.
http://bugs.winehq.org/show_bug.cgi?id=28693
--- Comment #2 from jslu jiashulu@gmail.com 2011-10-17 05:58:07 CDT --- (In reply to comment #1) Thanks for the reply.
I wonder whether the get_mmdevenum function can be made single-threaded. The fact that bass.dll can be loaded successfully under windows means that windows doesn't create a new thread to get MMDev enumerator.
http://bugs.winehq.org/show_bug.cgi?id=28693
--- Comment #3 from jslu jiashulu@gmail.com 2011-10-23 20:29:40 CDT --- Created attachment 37097 --> http://bugs.winehq.org/attachment.cgi?id=37097 Make get_mmdevenum() single-threaded
http://bugs.winehq.org/show_bug.cgi?id=28693
--- Comment #4 from jslu jiashulu@gmail.com 2011-10-23 20:47:10 CDT --- A patch to make get_mmdevenum() single-threaded.
Bass.dll is loaded successfully after applying the patch.
One possible remaining problem is that the MMDeviceEnumerator object is not released. However, it seems that originally the MMDeviceEnumerator object will not be destroyed until the whole process is ended.
http://bugs.winehq.org/show_bug.cgi?id=28693
jslu jiashulu@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Attachment #37097|0 |1 is obsolete| |
--- Comment #5 from jslu jiashulu@gmail.com 2011-10-28 20:22:26 CDT --- Created attachment 37180 --> http://bugs.winehq.org/attachment.cgi?id=37180 Update of previous patch to fix the CoInitializeEx problem
This patch should work well under any circumstances.
http://bugs.winehq.org/show_bug.cgi?id=28693
jslu jiashulu@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Fixed by SHA1| |6d391df4aaefaef1e13ff2dd357 | |1f96fdff6405d Status|NEW |RESOLVED Resolution| |FIXED
--- Comment #6 from jslu jiashulu@gmail.com 2012-01-16 18:31:05 CST --- Commit 6d391df4aaefaef1e13ff2dd3571f96fdff6405d has made get_mmdevenum() single-threaded. This bug is fixed.
http://bugs.winehq.org/show_bug.cgi?id=28693
Alexandre Julliard julliard@winehq.org changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |CLOSED
--- Comment #7 from Alexandre Julliard julliard@winehq.org 2012-01-27 14:16:41 CST --- Closing bugs fixed in 1.4-rc1.