Index: jingle/glue/thread_wrapper.cc |
diff --git a/jingle/glue/thread_wrapper.cc b/jingle/glue/thread_wrapper.cc |
index c63f89a7ed79476acd9891d8056df0fb4f5cf65f..c84f9826a766ce788a8ee532ded746ec0da1d9b1 100644 |
--- a/jingle/glue/thread_wrapper.cc |
+++ b/jingle/glue/thread_wrapper.cc |
@@ -31,8 +31,10 @@ base::LazyInstance<base::ThreadLocalPointer<JingleThreadWrapper> > |
// static |
void JingleThreadWrapper::EnsureForCurrentThread() { |
if (JingleThreadWrapper::current() == NULL) { |
- g_jingle_thread_wrapper.Get().Set( |
- new JingleThreadWrapper(MessageLoop::current())); |
+ MessageLoop* message_loop = MessageLoop::current(); |
Wez
2012/08/09 23:30:25
This will only work if called from a MessageLoop;
Sergey Ulanov
2012/08/13 21:15:34
Yes. That's intentional. We need it to add destruc
Wez
2012/08/14 00:06:04
Would it be useful to have a LeakyEnsureForCurrent
Sergey Ulanov
2012/08/14 01:02:14
Don't think it's necessary. It's always possible t
|
+ 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,16 @@ 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); |
+ DCHECK(task_runner->BelongsToCurrentThread()); |
+ DCHECK(!talk_base::Thread::Current()); |
talk_base::MessageQueueManager::Instance()->Add(this); |
- message_loop_->AddDestructionObserver(this); |
- |
WrapCurrent(); |
} |
@@ -69,7 +68,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 +160,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, |
+ base::Unretained(this))); |
Wez
2012/08/09 23:30:25
Should this be a WeakPtr?
Sergey Ulanov
2012/08/13 21:15:34
Yes. Thanks for catching this. Fixed.
|
while (!pending_send.done_event.IsSignaled()) { |
@@ -214,14 +212,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, |
+ base::Unretained(this), task_id)); |
Wez
2012/08/09 23:30:25
WeakPtr?
Sergey Ulanov
2012/08/13 21:15:34
Done.
|
} 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, |
+ base::Unretained(this), task_id), |
Wez
2012/08/09 23:30:25
WeakPtr?
Sergey Ulanov
2012/08/13 21:15:34
Done.
|
+ base::TimeDelta::FromMilliseconds(delay_ms)); |
} |
} |