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

Side by Side Diff: ipc/ipc_sync_channel.h

Issue 238813010: Remove SyncChannel::SendWithTimeout (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | ipc/ipc_sync_channel.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef IPC_IPC_SYNC_CHANNEL_H_ 5 #ifndef IPC_IPC_SYNC_CHANNEL_H_
6 #define IPC_IPC_SYNC_CHANNEL_H_ 6 #define IPC_IPC_SYNC_CHANNEL_H_
7 7
8 #include <string> 8 #include <string>
9 #include <deque> 9 #include <deque>
10 10
(...skipping 12 matching lines...) Expand all
23 namespace IPC { 23 namespace IPC {
24 24
25 class SyncMessage; 25 class SyncMessage;
26 26
27 // This is similar to ChannelProxy, with the added feature of supporting sending 27 // This is similar to ChannelProxy, with the added feature of supporting sending
28 // synchronous messages. 28 // synchronous messages.
29 // 29 //
30 // Overview of how the sync channel works 30 // Overview of how the sync channel works
31 // -------------------------------------- 31 // --------------------------------------
32 // When the sending thread sends a synchronous message, we create a bunch 32 // When the sending thread sends a synchronous message, we create a bunch
33 // of tracking info (created in SendWithTimeout, stored in the PendingSyncMsg 33 // of tracking info (created in Send, stored in the PendingSyncMsg
34 // structure) associated with the message that we identify by the unique 34 // structure) associated with the message that we identify by the unique
35 // "MessageId" on the SyncMessage. Among the things we save is the 35 // "MessageId" on the SyncMessage. Among the things we save is the
36 // "Deserializer" which is provided by the sync message. This object is in 36 // "Deserializer" which is provided by the sync message. This object is in
37 // charge of reading the parameters from the reply message and putting them in 37 // charge of reading the parameters from the reply message and putting them in
38 // the output variables provided by its caller. 38 // the output variables provided by its caller.
39 // 39 //
40 // The info gets stashed in a queue since we could have a nested stack of sync 40 // The info gets stashed in a queue since we could have a nested stack of sync
41 // messages (each side could send sync messages in response to sync messages, 41 // messages (each side could send sync messages in response to sync messages,
42 // so it works like calling a function). The message is sent to the I/O thread 42 // so it works like calling a function). The message is sent to the I/O thread
43 // for dispatch and the original thread blocks waiting for the reply. 43 // for dispatch and the original thread blocks waiting for the reply.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 // Creates an uninitialized sync channel. Call ChannelProxy::Init to 76 // Creates an uninitialized sync channel. Call ChannelProxy::Init to
77 // initialize the channel. This two-step setup allows message filters to be 77 // initialize the channel. This two-step setup allows message filters to be
78 // added before any messages are sent or received. 78 // added before any messages are sent or received.
79 SyncChannel(Listener* listener, 79 SyncChannel(Listener* listener,
80 base::SingleThreadTaskRunner* ipc_task_runner, 80 base::SingleThreadTaskRunner* ipc_task_runner,
81 base::WaitableEvent* shutdown_event); 81 base::WaitableEvent* shutdown_event);
82 82
83 virtual ~SyncChannel(); 83 virtual ~SyncChannel();
84 84
85 virtual bool Send(Message* message) OVERRIDE; 85 virtual bool Send(Message* message) OVERRIDE;
86 virtual bool SendWithTimeout(Message* message, int timeout_ms);
87
88 // Whether we allow sending messages with no time-out.
89 void set_sync_messages_with_no_timeout_allowed(bool value) {
90 sync_messages_with_no_timeout_allowed_ = value;
91 }
92 86
93 // Sets the dispatch group for this channel, to only allow re-entrant dispatch 87 // Sets the dispatch group for this channel, to only allow re-entrant dispatch
94 // of messages to other channels in the same group. 88 // of messages to other channels in the same group.
95 // 89 //
96 // Normally, any unblocking message coming from any channel can be dispatched 90 // Normally, any unblocking message coming from any channel can be dispatched
97 // when any (possibly other) channel is blocked on sending a message. This is 91 // when any (possibly other) channel is blocked on sending a message. This is
98 // needed in some cases to unblock certain loops (e.g. necessary when some 92 // needed in some cases to unblock certain loops (e.g. necessary when some
99 // processes share a window hierarchy), but may cause re-entrancy issues in 93 // processes share a window hierarchy), but may cause re-entrancy issues in
100 // some cases where such loops are not possible. This flags allows the tagging 94 // some cases where such loops are not possible. This flags allows the tagging
101 // of some particular channels to only re-enter in known correct cases. 95 // of some particular channels to only re-enter in known correct cases.
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 static void WaitForReply( 199 static void WaitForReply(
206 SyncContext* context, base::WaitableEvent* pump_messages_event); 200 SyncContext* context, base::WaitableEvent* pump_messages_event);
207 201
208 // Runs a nested message loop until a reply arrives, times out, or the process 202 // Runs a nested message loop until a reply arrives, times out, or the process
209 // shuts down. 203 // shuts down.
210 static void WaitForReplyWithNestedMessageLoop(SyncContext* context); 204 static void WaitForReplyWithNestedMessageLoop(SyncContext* context);
211 205
212 // Starts the dispatch watcher. 206 // Starts the dispatch watcher.
213 void StartWatching(); 207 void StartWatching();
214 208
215 bool sync_messages_with_no_timeout_allowed_;
216
217 // Used to signal events between the IPC and listener threads. 209 // Used to signal events between the IPC and listener threads.
218 base::WaitableEventWatcher dispatch_watcher_; 210 base::WaitableEventWatcher dispatch_watcher_;
219 base::WaitableEventWatcher::EventCallback dispatch_watcher_callback_; 211 base::WaitableEventWatcher::EventCallback dispatch_watcher_callback_;
220 212
221 DISALLOW_COPY_AND_ASSIGN(SyncChannel); 213 DISALLOW_COPY_AND_ASSIGN(SyncChannel);
222 }; 214 };
223 215
224 } // namespace IPC 216 } // namespace IPC
225 217
226 #endif // IPC_IPC_SYNC_CHANNEL_H_ 218 #endif // IPC_IPC_SYNC_CHANNEL_H_
OLDNEW
« no previous file with comments | « no previous file | ipc/ipc_sync_channel.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698