Index: ipc/ipc_sync_channel.cc |
diff --git a/ipc/ipc_sync_channel.cc b/ipc/ipc_sync_channel.cc |
index 0d61e08ce945b01e27fd3005b138c1bfbc5c7eee..842e04e74c6f33038a7415c205af3df1c8c53137 100644 |
--- a/ipc/ipc_sync_channel.cc |
+++ b/ipc/ipc_sync_channel.cc |
@@ -88,9 +88,9 @@ class SyncChannel::ReceivedSyncMsgQueue : |
outer_state_(sync_msg_queue_->top_send_done_event_watcher_), |
event_(context->GetSendDoneEvent()), |
callback_( |
- base::Bind(&SyncChannel::SyncContext::OnSendDoneEventSignaled, |
- context, |
- run_loop)) { |
+ base::BindOnce(&SyncChannel::SyncContext::OnSendDoneEventSignaled, |
+ context, |
+ run_loop)) { |
sync_msg_queue_->top_send_done_event_watcher_ = this; |
if (outer_state_) |
outer_state_->StopWatching(); |
@@ -104,14 +104,23 @@ class SyncChannel::ReceivedSyncMsgQueue : |
} |
private: |
- void StartWatching() { watcher_.StartWatching(event_, callback_); } |
+ void Run(WaitableEvent* event) { |
+ DCHECK(callback_); |
+ std::move(callback_).Run(event); |
+ } |
+ |
+ void StartWatching() { |
+ watcher_.StartWatching(event_, base::BindOnce(&NestedSendDoneWatcher::Run, |
+ base::Unretained(this))); |
+ } |
+ |
void StopWatching() { watcher_.StopWatching(); } |
ReceivedSyncMsgQueue* const sync_msg_queue_; |
NestedSendDoneWatcher* const outer_state_; |
base::WaitableEvent* const event_; |
- const base::WaitableEventWatcher::EventCallback callback_; |
+ base::WaitableEventWatcher::EventCallback callback_; |
base::WaitableEventWatcher watcher_; |
DISALLOW_COPY_AND_ASSIGN(NestedSendDoneWatcher); |