| Index: jingle/glue/thread_wrapper.cc
|
| diff --git a/jingle/glue/thread_wrapper.cc b/jingle/glue/thread_wrapper.cc
|
| index c63f89a7ed79476acd9891d8056df0fb4f5cf65f..3c0635f87032840c28c120f619ac4880c0782dab 100644
|
| --- a/jingle/glue/thread_wrapper.cc
|
| +++ b/jingle/glue/thread_wrapper.cc
|
| @@ -29,10 +29,12 @@ base::LazyInstance<base::ThreadLocalPointer<JingleThreadWrapper> >
|
| g_jingle_thread_wrapper = LAZY_INSTANCE_INITIALIZER;
|
|
|
| // static
|
| -void JingleThreadWrapper::EnsureForCurrentThread() {
|
| +void JingleThreadWrapper::EnsureForCurrentMessageLoop() {
|
| if (JingleThreadWrapper::current() == NULL) {
|
| - g_jingle_thread_wrapper.Get().Set(
|
| - new JingleThreadWrapper(MessageLoop::current()));
|
| + MessageLoop* message_loop = MessageLoop::current();
|
| + g_jingle_thread_wrapper.Get().Set(new JingleThreadWrapper(
|
| + message_loop->message_loop_proxy()));
|
| + message_loop->AddDestructionObserver(current());
|
| }
|
|
|
| DCHECK_EQ(talk_base::Thread::Current(), current());
|
| @@ -43,19 +45,18 @@ JingleThreadWrapper* JingleThreadWrapper::current() {
|
| return g_jingle_thread_wrapper.Get().Get();
|
| }
|
|
|
| -JingleThreadWrapper::JingleThreadWrapper(MessageLoop* message_loop)
|
| +JingleThreadWrapper::JingleThreadWrapper(
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner)
|
| : talk_base::Thread(new talk_base::NullSocketServer()),
|
| - message_loop_(message_loop),
|
| + task_runner_(task_runner),
|
| send_allowed_(false),
|
| last_task_id_(0),
|
| - pending_send_event_(true, false) {
|
| - DCHECK_EQ(message_loop_, MessageLoop::current());
|
| -
|
| - talk_base::ThreadManager::Instance()->UnwrapCurrentThread();
|
| - talk_base::ThreadManager::Instance()->SetCurrentThread(this);
|
| + pending_send_event_(true, false),
|
| + weak_ptr_factory_(this),
|
| + weak_ptr_(weak_ptr_factory_.GetWeakPtr()) {
|
| + DCHECK(task_runner->BelongsToCurrentThread());
|
| + DCHECK(!talk_base::Thread::Current());
|
| talk_base::MessageQueueManager::Instance()->Add(this);
|
| - message_loop_->AddDestructionObserver(this);
|
| -
|
| WrapCurrent();
|
| }
|
|
|
| @@ -69,7 +70,6 @@ void JingleThreadWrapper::WillDestroyCurrentMessageLoop() {
|
| g_jingle_thread_wrapper.Get().Set(NULL);
|
| talk_base::ThreadManager::Instance()->SetCurrentThread(NULL);
|
| talk_base::MessageQueueManager::Instance()->Remove(this);
|
| - message_loop_->RemoveDestructionObserver(this);
|
| talk_base::SocketServer* ss = socketserver();
|
| delete this;
|
| delete ss;
|
| @@ -162,9 +162,9 @@ void JingleThreadWrapper::Send(talk_base::MessageHandler *handler, uint32 id,
|
| // Need to signal |pending_send_event_| here in case the thread is
|
| // sending message to another thread.
|
| pending_send_event_.Signal();
|
| - message_loop_->PostTask(FROM_HERE,
|
| - base::Bind(&JingleThreadWrapper::ProcessPendingSends,
|
| - base::Unretained(this)));
|
| + task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&JingleThreadWrapper::ProcessPendingSends,
|
| + weak_ptr_));
|
|
|
|
|
| while (!pending_send.done_event.IsSignaled()) {
|
| @@ -214,14 +214,14 @@ void JingleThreadWrapper::PostTaskInternal(
|
| }
|
|
|
| if (delay_ms <= 0) {
|
| - message_loop_->PostTask(FROM_HERE,
|
| - base::Bind(&JingleThreadWrapper::RunTask,
|
| - base::Unretained(this), task_id));
|
| + task_runner_->PostTask(FROM_HERE,
|
| + base::Bind(&JingleThreadWrapper::RunTask,
|
| + weak_ptr_, task_id));
|
| } else {
|
| - message_loop_->PostDelayedTask(FROM_HERE,
|
| - base::Bind(&JingleThreadWrapper::RunTask,
|
| - base::Unretained(this), task_id),
|
| - base::TimeDelta::FromMilliseconds(delay_ms));
|
| + task_runner_->PostDelayedTask(FROM_HERE,
|
| + base::Bind(&JingleThreadWrapper::RunTask,
|
| + weak_ptr_, task_id),
|
| + base::TimeDelta::FromMilliseconds(delay_ms));
|
| }
|
| }
|
|
|
|
|