-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
http://codereview.secondlife.com/r/272/#review639
-----------------------------------------------------------

Ship it!


- Oz


On April 18, 2011, 6:04 a.m., Siana Gearz wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> http://codereview.secondlife.com/r/272/
> -----------------------------------------------------------
> 
> (Updated April 18, 2011, 6:04 a.m.)
> 
> 
> Review request for Viewer.
> 
> 
> Summary
> -------
> 
> STORM-1088: bundled winmm.dll shim crashes on start-up on some systems.
> 
> This patch tests the theory that according to MSDN, calls to LoadLibrary, 
> GetProcAddress in DllMain are likely to create a race condition.
> 
> 
> This addresses bug storm-1088.
>     http://jira.secondlife.com/browse/storm-1088
> 
> 
> Diffs
> -----
> 
>   doc/contributions.txt f632f87bb71b 
>   indra/media_plugins/winmmshim/forwarding_api.h f632f87bb71b 
>   indra/media_plugins/winmmshim/forwarding_api.cpp f632f87bb71b 
>   indra/media_plugins/winmmshim/winmm_shim.cpp f632f87bb71b 
> 
> Diff: http://codereview.secondlife.com/r/272/diff
> 
> 
> Testing
> -------
> 
> winmm.dll from Second Life 2.6.3 (226640) Apr 14 2011 12:32:01 (Second Life 
> Beta Viewer) causes this viewer, and a number of prior versions, to crash at 
> startup for me.
> winmm.dll built by me from viewer-development source code also does, tested 
> against the same viewer binary.
> 
> The version of winmm.dll with my patch, built by me and substituted into the 
> installed viewer, causes the above mentioned viewer to start up without issue 
> and function apparently properly - sound works (FMOD), media_plugin_webkit 
> works, voice is audible, windows_volume_catcher of llqtwebkit is functional.
> Same applies to Second Life 2.6.3 (226792) Apr 17 2011 07:01:06 (Second Life 
> Developer), built by Oz Linden with a prior version of my patch.
> 
> media_plugin_quicktime functionality untested, voice capture untested.
> 
> The patch contains debug output, which causes the following messages in 
> debugger:
> 
> INFO: LLAudioEngine::init: LLAudioEngine::init() AudioEngine successfully 
> initialized
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\winmm.dll', Cannot find 
> or open the PDB file
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\myokent.dll', Cannot 
> find or open the PDB file
> WINMM_SHIM.DLL: real winmm.dll initialized successfully
> WINMM_SHIM.DLL: real winmm.dll initialized successfully
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\wdmaud.drv', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Unloaded 'C:\WINXP\system32\wdmaud.drv'
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\wdmaud.drv', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Unloaded 'C:\WINXP\system32\wdmaud.drv'
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\wdmaud.drv', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Unloaded 'C:\WINXP\system32\wdmaud.drv'
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\wdmaud.drv', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Unloaded 'C:\WINXP\system32\wdmaud.drv'
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\wdmaud.drv', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Unloaded 'C:\WINXP\system32\wdmaud.drv'
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\wdmaud.drv', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\msacm32.drv', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\midimap.dll', Cannot 
> find or open the PDB file
> 'SecondLifeBetaViewer.exe': Loaded 'C:\WINXP\system32\ksuser.dll', Cannot 
> find or open the PDB file
> INFO: idle_startup: Audio Engine Initialized.
> 
> This is very puzzling to me, why the success message is being output twice. 
> Perhaps if the reason of that is found, the real reason for the failure of 
> failure of upstream winmm shim would become evident, or perhaps it's a bug in 
> my patch. I'd like everyone to check whether they see the same thing.
> 
> ...
> 
> After some testing, it turns out myokent.dll (MIDI Yoke, a software loop-back 
> cable for musicians) seems to be the culprit on my system, causing a trivial 
> circular dependency, not a race condition. It tries to use a number of 
> winmm.dll functions (first of them being GetDriverModuleHandle) right from 
> its DllMain, which is invoked by LoadLibrary. Now it turns out, that if we 
> try to load real winmm.dll from DllMain, which in turn loads myokent.dll from 
> its DllMain, which in turn from its DllMain uses winmm.dll's functions, 
> calling the ones in OUR winmm.dll, which simply aren't initialized at that 
> point yet because we need LoadLibrary (and DllMains of used DLLs) to 
> complete, then we can populate the function pointers. My patch apparently 
> sidesteps this trivial problem, but this doesn't give an insight on why, on 
> systems with UAC, for some people, winmm.dll shim would cause a problem when 
> run as a normal user, and not cause a problem when run with admin rights.
> 
> Still, if we assume the other problems on affected systems are similar in 
> nature (circular dependency), then it appears we still need to move loading 
> and initialization outside of DllMain to resolve them. Scratch that, if the 
> problem is only this, it would be sufficient to first call LoadLibraryEx with 
> DONT_RESOLVE_DLL_REFERENCES, then call init_function_pointers, then have a 
> normal LoadLibrary call to kick off the rest of the chain.
> 
> 
> Thanks,
> 
> Siana
> 
>

_______________________________________________
Policies and (un)subscribe information available here:
http://wiki.secondlife.com/wiki/OpenSource-Dev
Please read the policies before posting to keep unmoderated posting privileges

Reply via email to