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

Unified Diff: ipc/ipc_sync_message_filter.cc

Issue 1311043009: Add missing locking for the |sender_| member in IPC::SyncMessageFilter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move lock. Created 5 years, 3 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_sync_message_filter.cc
diff --git a/ipc/ipc_sync_message_filter.cc b/ipc/ipc_sync_message_filter.cc
index f6d485dd4b77d96ec81ba4395142ecb7750d0179..1a6f6d9255a723d2a98bb938e3d0331d2e7885d9 100644
--- a/ipc/ipc_sync_message_filter.cc
+++ b/ipc/ipc_sync_message_filter.cc
@@ -71,10 +71,10 @@ bool SyncMessageFilter::Send(Message* message) {
}
void SyncMessageFilter::OnFilterAdded(Sender* sender) {
- sender_ = sender;
std::vector<Message*> pending_messages;
{
base::AutoLock auto_lock(lock_);
+ sender_ = sender;
io_task_runner_ = base::ThreadTaskRunnerHandle::Get();
pending_messages_.release(&pending_messages);
}
@@ -83,11 +83,13 @@ void SyncMessageFilter::OnFilterAdded(Sender* sender) {
}
void SyncMessageFilter::OnChannelError() {
+ base::AutoLock auto_lock(lock_);
sender_ = NULL;
SignalAllEvents();
}
void SyncMessageFilter::OnChannelClosing() {
+ base::AutoLock auto_lock(lock_);
sender_ = NULL;
SignalAllEvents();
}
@@ -129,6 +131,7 @@ void SyncMessageFilter::SendOnIOThread(Message* message) {
if (message->is_sync()) {
// We don't know which thread sent it, but it doesn't matter, just signal
// them all.
+ base::AutoLock auto_lock(lock_);
SignalAllEvents();
}
@@ -136,7 +139,7 @@ void SyncMessageFilter::SendOnIOThread(Message* message) {
}
void SyncMessageFilter::SignalAllEvents() {
- base::AutoLock auto_lock(lock_);
+ lock_.AssertAcquired();
for (PendingSyncMessages::iterator iter = pending_sync_messages_.begin();
iter != pending_sync_messages_.end(); ++iter) {
(*iter)->done_event->Signal();
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698