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

Side by Side Diff: ipc/ipc_sync_channel.cc

Issue 2027303002: Migrate WaitableEvent to enum-based constructor in ipc/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@WEvent_enums
Patch Set: Created 4 years, 6 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
« no previous file with comments | « ipc/ipc_send_fds_test.cc ('k') | ipc/ipc_sync_channel_unittest.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 #include "ipc/ipc_sync_channel.h" 5 #include "ipc/ipc_sync_channel.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <utility> 10 #include <utility>
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 183
184 void set_top_send_done_watcher(base::WaitableEventWatcher* watcher) { 184 void set_top_send_done_watcher(base::WaitableEventWatcher* watcher) {
185 top_send_done_watcher_ = watcher; 185 top_send_done_watcher_ = watcher;
186 } 186 }
187 187
188 private: 188 private:
189 friend class base::RefCountedThreadSafe<ReceivedSyncMsgQueue>; 189 friend class base::RefCountedThreadSafe<ReceivedSyncMsgQueue>;
190 190
191 // See the comment in SyncChannel::SyncChannel for why this event is created 191 // See the comment in SyncChannel::SyncChannel for why this event is created
192 // as manual reset. 192 // as manual reset.
193 ReceivedSyncMsgQueue() : 193 ReceivedSyncMsgQueue()
194 message_queue_version_(0), 194 : message_queue_version_(0),
195 dispatch_event_(true, false), 195 dispatch_event_(base::WaitableEvent::ResetPolicy::MANUAL,
196 listener_task_runner_(base::ThreadTaskRunnerHandle::Get()), 196 base::WaitableEvent::InitialState::NOT_SIGNALED),
197 task_pending_(false), 197 listener_task_runner_(base::ThreadTaskRunnerHandle::Get()),
198 listener_count_(0), 198 task_pending_(false),
199 top_send_done_watcher_(NULL) { 199 listener_count_(0),
200 } 200 top_send_done_watcher_(NULL) {}
201 201
202 ~ReceivedSyncMsgQueue() {} 202 ~ReceivedSyncMsgQueue() {}
203 203
204 // Holds information about a queued synchronous message or reply. 204 // Holds information about a queued synchronous message or reply.
205 struct QueuedMessage { 205 struct QueuedMessage {
206 QueuedMessage(Message* m, SyncContext* c) : message(m), context(c) { } 206 QueuedMessage(Message* m, SyncContext* c) : message(m), context(c) { }
207 Message* message; 207 Message* message;
208 scoped_refptr<SyncChannel::SyncContext> context; 208 scoped_refptr<SyncChannel::SyncContext> context;
209 }; 209 };
210 210
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 // the reply has arrived. 253 // the reply has arrived.
254 void SyncChannel::SyncContext::Push(SyncMessage* sync_msg) { 254 void SyncChannel::SyncContext::Push(SyncMessage* sync_msg) {
255 // Create the tracking information for this message. This object is stored 255 // Create the tracking information for this message. This object is stored
256 // by value since all members are pointers that are cheap to copy. These 256 // by value since all members are pointers that are cheap to copy. These
257 // pointers are cleaned up in the Pop() function. 257 // pointers are cleaned up in the Pop() function.
258 // 258 //
259 // The event is created as manual reset because in between Signal and 259 // The event is created as manual reset because in between Signal and
260 // OnObjectSignalled, another Send can happen which would stop the watcher 260 // OnObjectSignalled, another Send can happen which would stop the watcher
261 // from being called. The event would get watched later, when the nested 261 // from being called. The event would get watched later, when the nested
262 // Send completes, so the event will need to remain set. 262 // Send completes, so the event will need to remain set.
263 PendingSyncMsg pending(SyncMessage::GetMessageId(*sync_msg), 263 PendingSyncMsg pending(
264 sync_msg->GetReplyDeserializer(), 264 SyncMessage::GetMessageId(*sync_msg), sync_msg->GetReplyDeserializer(),
265 new WaitableEvent(true, false)); 265 new WaitableEvent(base::WaitableEvent::ResetPolicy::MANUAL,
266 base::WaitableEvent::InitialState::NOT_SIGNALED));
266 base::AutoLock auto_lock(deserializers_lock_); 267 base::AutoLock auto_lock(deserializers_lock_);
267 deserializers_.push_back(pending); 268 deserializers_.push_back(pending);
268 } 269 }
269 270
270 bool SyncChannel::SyncContext::Pop() { 271 bool SyncChannel::SyncContext::Pop() {
271 bool result; 272 bool result;
272 { 273 {
273 base::AutoLock auto_lock(deserializers_lock_); 274 base::AutoLock auto_lock(deserializers_lock_);
274 PendingSyncMsg msg = deserializers_.back(); 275 PendingSyncMsg msg = deserializers_.back();
275 delete msg.deserializer; 276 delete msg.deserializer;
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 TRACE_EVENT2("ipc", "SyncChannel::SendOnIPCThread", 632 TRACE_EVENT2("ipc", "SyncChannel::SendOnIPCThread",
632 "class", IPC_MESSAGE_ID_CLASS(message->type()), 633 "class", IPC_MESSAGE_ID_CLASS(message->type()),
633 "line", IPC_MESSAGE_ID_LINE(message->type())); 634 "line", IPC_MESSAGE_ID_LINE(message->type()));
634 #endif 635 #endif
635 if (!message->is_sync()) 636 if (!message->is_sync())
636 return ChannelProxy::SendOnIPCThread(std::move(message)); 637 return ChannelProxy::SendOnIPCThread(std::move(message));
637 return Send(message.release()); 638 return Send(message.release());
638 } 639 }
639 640
640 } // namespace IPC 641 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc_send_fds_test.cc ('k') | ipc/ipc_sync_channel_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698