diff options
| author | Oz Linden <oz@lindenlab.com> | 2011-04-21 14:30:58 -0400 |
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2011-04-21 14:30:58 -0400 |
| commit | 49ecf8efbc58f4030f3968c9db613aba9d99f0c2 (patch) | |
| tree | f5b9985ab298acc3adfb81d94327e7acd8c2d86b /indra/media_plugins/winmmshim/winmm_shim.cpp | |
| parent | da7cd9f8117757cd6acb0a5e93bc3c60443374f9 (diff) | |
| parent | da8f6c675e9a58d4b808aa0ba2917e767106d7a0 (diff) | |
merge back fixes for STORM-1088 and (possibly) STORM-1141
Diffstat (limited to 'indra/media_plugins/winmmshim/winmm_shim.cpp')
| -rw-r--r-- | indra/media_plugins/winmmshim/winmm_shim.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp index 9563a3b664..47a1e5c018 100644 --- a/indra/media_plugins/winmmshim/winmm_shim.cpp +++ b/indra/media_plugins/winmmshim/winmm_shim.cpp @@ -32,14 +32,21 @@ using std::wstring; static float sVolumeLevel = 1.f; static bool sMute = false; +static CRITICAL_SECTION sCriticalSection; BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { + InitializeCriticalSection(&sCriticalSection); + return TRUE; +} + +void ll_winmm_shim_initialize(){ static bool initialized = false; // do this only once + EnterCriticalSection(&sCriticalSection); if (!initialized) { // bind to original winmm.dll TCHAR system_path[MAX_PATH]; @@ -54,13 +61,15 @@ BOOL APIENTRY DllMain( HMODULE hModule, { // we have a dll, let's get out pointers! initialized = true; init_function_pointers(winmm_handle); - return true; + ::OutputDebugStringA("WINMM_SHIM.DLL: real winmm.dll initialized successfully\n"); + } + else + { + // failed to initialize real winmm.dll + ::OutputDebugStringA("WINMM_SHIM.DLL: Failed to initialize real winmm.dll\n"); } - - // failed to initialize real winmm.dll - return false; } - return true; + LeaveCriticalSection(&sCriticalSection); } @@ -79,6 +88,7 @@ extern "C" MMRESULT WINAPI waveOutOpen( LPHWAVEOUT phwo, UINT uDeviceID, LPCWAVEFORMATEX pwfx, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen) { + ll_winmm_shim_initialize(); if (pwfx->wFormatTag != WAVE_FORMAT_PCM || (pwfx->wBitsPerSample != 8 && pwfx->wBitsPerSample != 16)) { // uncompressed 8 and 16 bit sound are the only types we support @@ -97,6 +107,7 @@ extern "C" MMRESULT WINAPI waveOutClose( HWAVEOUT hwo) { + ll_winmm_shim_initialize(); wave_out_map_t::iterator found_it = sWaveOuts.find(hwo); if (found_it != sWaveOuts.end()) { // forget what we know about this handle @@ -108,6 +119,7 @@ extern "C" MMRESULT WINAPI waveOutWrite( HWAVEOUT hwo, LPWAVEHDR pwh, UINT cbwh) { + ll_winmm_shim_initialize(); MMRESULT result = MMSYSERR_NOERROR; if (sMute) |
