Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(444)

Unified Diff: media/audio/win/audio_manager_win.cc

Issue 2784433002: Ensures that audio tasks cannot run after AudioManager is deleted. (Closed)
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/win/audio_manager_win.h ('k') | media/audio/win/audio_output_win_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/win/audio_manager_win.cc
diff --git a/media/audio/win/audio_manager_win.cc b/media/audio/win/audio_manager_win.cc
index 119ac3a2f4a2f078ce44135e499de67498f46a57..6b96668c5d3a9d05dc9089a3f74935177c84309e 100644
--- a/media/audio/win/audio_manager_win.cc
+++ b/media/audio/win/audio_manager_win.cc
@@ -131,13 +131,9 @@ static int NumberOfWaveOutBuffers() {
return (base::win::GetVersion() == base::win::VERSION_VISTA) ? 4 : 3;
}
-AudioManagerWin::AudioManagerWin(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
- AudioLogFactory* audio_log_factory)
- : AudioManagerBase(std::move(task_runner),
- std::move(worker_task_runner),
- audio_log_factory) {
+AudioManagerWin::AudioManagerWin(std::unique_ptr<AudioThread> audio_thread,
+ AudioLogFactory* audio_log_factory)
+ : AudioManagerBase(std::move(audio_thread), audio_log_factory) {
// |CoreAudioUtil::IsSupported()| uses static variables to avoid doing
// multiple initializations. This is however not thread safe.
// So, here we call it explicitly before we kick off the audio thread
@@ -157,8 +153,14 @@ AudioManagerWin::AudioManagerWin(
base::Unretained(this)));
}
-AudioManagerWin::~AudioManagerWin() {
- Shutdown();
+AudioManagerWin::~AudioManagerWin() = default;
+
+void AudioManagerWin::ShutdownOnAudioThread() {
+ AudioManagerBase::ShutdownOnAudioThread();
+
+ // Destroy AudioDeviceListenerWin instance on the audio thread because it
+ // expects to be constructed and destroyed on the same thread.
+ output_device_listener_.reset();
}
bool AudioManagerWin::HasAudioOutputDevices() {
@@ -464,13 +466,11 @@ AudioParameters AudioManagerWin::GetPreferredOutputStreamParameters(
}
// static
-ScopedAudioManagerPtr CreateAudioManager(
- scoped_refptr<base::SingleThreadTaskRunner> task_runner,
- scoped_refptr<base::SingleThreadTaskRunner> worker_task_runner,
+std::unique_ptr<AudioManager> CreateAudioManager(
+ std::unique_ptr<AudioThread> audio_thread,
AudioLogFactory* audio_log_factory) {
- return ScopedAudioManagerPtr(
- new AudioManagerWin(std::move(task_runner), std::move(worker_task_runner),
- audio_log_factory));
+ return base::MakeUnique<AudioManagerWin>(std::move(audio_thread),
+ audio_log_factory);
}
} // namespace media
« no previous file with comments | « media/audio/win/audio_manager_win.h ('k') | media/audio/win/audio_output_win_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698