| Index: media/base/message_loop_factory_impl.cc
|
| diff --git a/media/base/message_loop_factory_impl.cc b/media/base/message_loop_factory_impl.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..51b0bcc2ac37caa768c372f840716a43ad749732
|
| --- /dev/null
|
| +++ b/media/base/message_loop_factory_impl.cc
|
| @@ -0,0 +1,55 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "media/base/message_loop_factory_impl.h"
|
| +
|
| +namespace media {
|
| +
|
| +MessageLoopFactoryImpl::MessageLoopFactoryImpl() {
|
| +}
|
| +
|
| +MessageLoopFactoryImpl::~MessageLoopFactoryImpl() {
|
| + AutoLock auto_lock(lock_);
|
| +
|
| + for (ThreadMap::iterator iter = thread_map_.begin();
|
| + iter != thread_map_.end();
|
| + ++iter) {
|
| + base::Thread* thread = (*iter).second;
|
| +
|
| + if (thread) {
|
| + thread->Stop();
|
| + delete thread;
|
| + }
|
| + }
|
| + thread_map_.clear();
|
| +}
|
| +
|
| +// MessageLoopFactory methods.
|
| +MessageLoop* MessageLoopFactoryImpl::GetMessageLoop(const char* name) {
|
| + if (!name || !*name) {
|
| + return NULL;
|
| + }
|
| +
|
| + MessageLoop* message_loop = NULL;
|
| + AutoLock auto_lock(lock_);
|
| +
|
| + base::Thread* thread = thread_map_[std::string(name)];
|
| +
|
| + if (!thread) {
|
| + thread = new base::Thread(name);
|
| +
|
| + if (thread->Start()) {
|
| + thread_map_[name] = thread;
|
| + message_loop = thread->message_loop();
|
| + } else {
|
| + delete thread;
|
| + }
|
| + } else {
|
| + message_loop = thread->message_loop();
|
| + }
|
| +
|
| + return message_loop;
|
| +}
|
| +
|
| +} // namespace media
|
|
|