| Index: ipc/ipc_sync_channel.cc
|
| diff --git a/ipc/ipc_sync_channel.cc b/ipc/ipc_sync_channel.cc
|
| index 163c7ca6a7fdf9e9d20ed9145189cd482d53ecd7..f3c538421386a3fc03c076501e4b7d7eb10be632 100644
|
| --- a/ipc/ipc_sync_channel.cc
|
| +++ b/ipc/ipc_sync_channel.cc
|
| @@ -378,18 +378,19 @@ SyncChannel::SyncChannel(
|
| base::MessageLoopProxy* ipc_message_loop,
|
| bool create_pipe_now,
|
| WaitableEvent* shutdown_event)
|
| - : ChannelProxy(
|
| - channel_handle, mode, ipc_message_loop,
|
| - new SyncContext(listener, ipc_message_loop, shutdown_event),
|
| - create_pipe_now),
|
| + : ChannelProxy(new SyncContext(listener, ipc_message_loop, shutdown_event)),
|
| sync_messages_with_no_timeout_allowed_(true) {
|
| - // Ideally we only want to watch this object when running a nested message
|
| - // loop. However, we don't know when it exits if there's another nested
|
| - // message loop running under it or not, so we wouldn't know whether to
|
| - // stop or keep watching. So we always watch it, and create the event as
|
| - // manual reset since the object watcher might otherwise reset the event
|
| - // when we're doing a WaitMany.
|
| - dispatch_watcher_.StartWatching(sync_context()->GetDispatchEvent(), this);
|
| + ChannelProxy::Init(channel_handle, mode, create_pipe_now);
|
| + StartWatching();
|
| +}
|
| +
|
| +SyncChannel::SyncChannel(
|
| + Channel::Listener* listener,
|
| + base::MessageLoopProxy* ipc_message_loop,
|
| + WaitableEvent* shutdown_event)
|
| + : ChannelProxy(new SyncContext(listener, ipc_message_loop, shutdown_event)),
|
| + sync_messages_with_no_timeout_allowed_(true) {
|
| + StartWatching();
|
| }
|
|
|
| SyncChannel::~SyncChannel() {
|
| @@ -514,4 +515,14 @@ void SyncChannel::OnWaitableEventSignaled(WaitableEvent* event) {
|
| sync_context()->DispatchMessages();
|
| }
|
|
|
| +void SyncChannel::StartWatching() {
|
| + // Ideally we only want to watch this object when running a nested message
|
| + // loop. However, we don't know when it exits if there's another nested
|
| + // message loop running under it or not, so we wouldn't know whether to
|
| + // stop or keep watching. So we always watch it, and create the event as
|
| + // manual reset since the object watcher might otherwise reset the event
|
| + // when we're doing a WaitMany.
|
| + dispatch_watcher_.StartWatching(sync_context()->GetDispatchEvent(), this);
|
| +}
|
| +
|
| } // namespace IPC
|
|
|