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

Unified Diff: jingle/notifier/listener/mediator_thread_impl.cc

Issue 6794005: Move sync notifier contruction out of syncer thread. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Minor fix. Created 9 years, 9 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
Index: jingle/notifier/listener/mediator_thread_impl.cc
diff --git a/jingle/notifier/listener/mediator_thread_impl.cc b/jingle/notifier/listener/mediator_thread_impl.cc
index 6887f10f2eda74d8a77f1727ccf74303b56b1067..7a7210c9c4809587ecfe2d440144c9ecda56feb2 100644
--- a/jingle/notifier/listener/mediator_thread_impl.cc
+++ b/jingle/notifier/listener/mediator_thread_impl.cc
@@ -22,14 +22,15 @@ namespace notifier {
MediatorThreadImpl::MediatorThreadImpl(
const NotifierOptions& notifier_options)
: observers_(new ObserverListThreadSafe<Observer>()),
- parent_message_loop_(MessageLoop::current()),
+ construction_message_loop_(MessageLoop::current()),
+ method_message_loop_(NULL),
notifier_options_(notifier_options),
worker_thread_("MediatorThread worker thread") {
- DCHECK(parent_message_loop_);
+ DCHECK(construction_message_loop_);
}
MediatorThreadImpl::~MediatorThreadImpl() {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ DCHECK_EQ(MessageLoop::current(), construction_message_loop_);
// If the worker thread is still around, we need to call Logout() so
// that all the variables living it get destroyed properly (i.e., on
// the worker thread).
@@ -39,15 +40,23 @@ MediatorThreadImpl::~MediatorThreadImpl() {
}
void MediatorThreadImpl::AddObserver(Observer* observer) {
+ // Can be the first method to be called. Assign method_message_loop_ if
akalin 2011/04/05 22:02:46 See TalkMediatorImpl comment.
nilesh 2011/04/05 23:36:17 Done.
+ // not already assigned.
+ if (!method_message_loop_) {
+ method_message_loop_ = MessageLoop::current();
+ } else {
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
+ }
observers_->AddObserver(observer);
}
void MediatorThreadImpl::RemoveObserver(Observer* observer) {
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
observers_->RemoveObserver(observer);
}
void MediatorThreadImpl::Start() {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ DCHECK_EQ(MessageLoop::current(), construction_message_loop_);
// We create the worker thread as an IO thread in preparation for
// making this use Chrome sockets.
const base::Thread::Options options(MessageLoop::TYPE_IO, 0);
@@ -57,14 +66,21 @@ void MediatorThreadImpl::Start() {
}
void MediatorThreadImpl::Login(const buzz::XmppClientSettings& settings) {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ // Can be the first method to be called. Assign method_message_loop_ if
+ // not already assigned.
+ if (!method_message_loop_) {
+ method_message_loop_ = MessageLoop::current();
+ } else {
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
+ }
+
worker_message_loop()->PostTask(
FROM_HERE,
NewRunnableMethod(this, &MediatorThreadImpl::DoLogin, settings));
}
void MediatorThreadImpl::Logout() {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
worker_message_loop()->PostTask(
FROM_HERE,
NewRunnableMethod(this, &MediatorThreadImpl::DoDisconnect));
@@ -76,7 +92,7 @@ void MediatorThreadImpl::Logout() {
}
void MediatorThreadImpl::ListenForUpdates() {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
worker_message_loop()->PostTask(
FROM_HERE,
NewRunnableMethod(this,
@@ -85,7 +101,7 @@ void MediatorThreadImpl::ListenForUpdates() {
void MediatorThreadImpl::SubscribeForUpdates(
const SubscriptionList& subscriptions) {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
worker_message_loop()->PostTask(
FROM_HERE,
NewRunnableMethod(
@@ -96,7 +112,7 @@ void MediatorThreadImpl::SubscribeForUpdates(
void MediatorThreadImpl::SendNotification(
const Notification& data) {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
worker_message_loop()->PostTask(
FROM_HERE,
NewRunnableMethod(this, &MediatorThreadImpl::DoSendNotification,
@@ -105,7 +121,7 @@ void MediatorThreadImpl::SendNotification(
void MediatorThreadImpl::UpdateXmppSettings(
const buzz::XmppClientSettings& settings) {
- DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
+ DCHECK_EQ(MessageLoop::current(), method_message_loop_);
worker_message_loop()->PostTask(
FROM_HERE,
NewRunnableMethod(this,
@@ -118,7 +134,7 @@ MessageLoop* MediatorThreadImpl::worker_message_loop() {
DCHECK(current_message_loop);
MessageLoop* worker_message_loop = worker_thread_.message_loop();
DCHECK(worker_message_loop);
- DCHECK(current_message_loop == parent_message_loop_ ||
+ DCHECK(current_message_loop == method_message_loop_ ||
current_message_loop == worker_message_loop);
return worker_message_loop;
}

Powered by Google App Engine
This is Rietveld 408576698