summaryrefslogtreecommitdiffstats
path: root/jingle/glue/thread_wrapper.cc
diff options
context:
space:
mode:
Diffstat (limited to 'jingle/glue/thread_wrapper.cc')
-rw-r--r--jingle/glue/thread_wrapper.cc46
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));
}
}