| Index: media/audio/audio_manager.cc
|
| diff --git a/media/audio/audio_manager.cc b/media/audio/audio_manager.cc
|
| index 6ee61d16cd7bd6ad3beb3a2cf912b7f4ac1aeffe..2bbffa7eb6a33866c2e2089fa8be28453acccad6 100644
|
| --- a/media/audio/audio_manager.cc
|
| +++ b/media/audio/audio_manager.cc
|
| @@ -11,6 +11,7 @@
|
| #include "base/logging.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/power_monitor/power_monitor.h"
|
| +#include "base/synchronization/waitable_event.h"
|
| #include "build/build_config.h"
|
| #include "media/audio/fake_audio_log_factory.h"
|
|
|
| @@ -157,7 +158,19 @@ AudioManager* AudioManager::CreateWithHangTimer(
|
|
|
| // static
|
| AudioManager* AudioManager::CreateForTesting() {
|
| - return Create(g_helper.Pointer()->fake_log_factory());
|
| + AudioManager* manager = Create(g_helper.Pointer()->fake_log_factory());
|
| +
|
| + // When created for testing, always ensure all methods are ready to run (even
|
| + // if they end up called from other threads.
|
| + if (!manager->GetTaskRunner()->BelongsToCurrentThread()) {
|
| + base::WaitableEvent event(false, false);
|
| + manager->GetTaskRunner()->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&base::WaitableEvent::Signal, base::Unretained(&event)));
|
| + event.Wait();
|
| + }
|
| +
|
| + return manager;
|
| }
|
|
|
| // static
|
|
|