diff options
Diffstat (limited to 'jingle/glue/thread_wrapper.cc')
-rw-r--r-- | jingle/glue/thread_wrapper.cc | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/jingle/glue/thread_wrapper.cc b/jingle/glue/thread_wrapper.cc index c63f89a..3c0635f 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)); } } |