summaryrefslogtreecommitdiffstats
path: root/media/audio/mac/audio_manager_mac.cc
diff options
context:
space:
mode:
Diffstat (limited to 'media/audio/mac/audio_manager_mac.cc')
-rw-r--r--media/audio/mac/audio_manager_mac.cc22
1 files changed, 19 insertions, 3 deletions
diff --git a/media/audio/mac/audio_manager_mac.cc b/media/audio/mac/audio_manager_mac.cc
index 528fd6e..312ecbb 100644
--- a/media/audio/mac/audio_manager_mac.cc
+++ b/media/audio/mac/audio_manager_mac.cc
@@ -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 @@ void AudioManagerMac::ReleaseOutputStream(
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;
}