Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1113)

Unified Diff: jingle/glue/thread_wrapper.cc

Issue 10823224: Update JingleThreadWrapper to allow it to be created using task runner. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « jingle/glue/thread_wrapper.h ('k') | jingle/glue/thread_wrapper_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
}
}
« no previous file with comments | « jingle/glue/thread_wrapper.h ('k') | jingle/glue/thread_wrapper_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698