Index: media/audio/mac/audio_manager_mac.cc |
=================================================================== |
--- media/audio/mac/audio_manager_mac.cc (revision 57255) |
+++ media/audio/mac/audio_manager_mac.cc (working copy) |
@@ -4,6 +4,7 @@ |
#include <CoreAudio/AudioHardware.h> |
+#include "base/at_exit.h" |
#include "media/audio/fake_audio_input_stream.h" |
#include "media/audio/fake_audio_output_stream.h" |
#include "media/audio/mac/audio_manager_mac.h" |
@@ -74,7 +75,22 @@ |
delete stream; |
} |
-// static |
-AudioManager* AudioManager::CreateAudioManager() { |
- return new AudioManagerMac(); |
+namespace { |
+ |
+AudioManagerMac* g_audio_manager = NULL; |
+ |
+} // namespace. |
+ |
+void DestroyAudioManagerMac(void* param) { |
+ delete g_audio_manager; |
+ g_audio_manager = NULL; |
} |
+ |
+// By convention, the AudioManager is not thread safe. |
+AudioManager* AudioManager::GetAudioManager() { |
+ if (!g_audio_manager) { |
+ g_audio_manager = new AudioManagerMac(); |
+ base::AtExitManager::RegisterCallback(&DestroyAudioManagerMac, NULL); |
+ } |
+ return g_audio_manager; |
+} |