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

Side by Side Diff: mojo/edk/system/message_pipe_dispatcher.cc

Issue 1748503002: [mojo-edk] Add MojoWatch and MojoCancelWatch APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: revert RequestContext usage, nits Created 4 years, 9 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 | « mojo/edk/system/message_pipe_dispatcher.h ('k') | mojo/edk/system/request_context.h » ('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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "mojo/edk/system/message_pipe_dispatcher.h" 5 #include "mojo/edk/system/message_pipe_dispatcher.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "mojo/edk/embedder/embedder_internal.h" 12 #include "mojo/edk/embedder/embedder_internal.h"
13 #include "mojo/edk/system/core.h" 13 #include "mojo/edk/system/core.h"
14 #include "mojo/edk/system/node_controller.h" 14 #include "mojo/edk/system/node_controller.h"
15 #include "mojo/edk/system/ports_message.h" 15 #include "mojo/edk/system/ports_message.h"
16 #include "mojo/edk/system/request_context.h"
16 #include "mojo/public/c/system/macros.h" 17 #include "mojo/public/c/system/macros.h"
17 18
18 namespace mojo { 19 namespace mojo {
19 namespace edk { 20 namespace edk {
20 21
21 namespace { 22 namespace {
22 23
23 // Header attached to every message sent over a message pipe. 24 // Header attached to every message sent over a message pipe.
24 struct MOJO_ALIGNAS(8) MessageHeader { 25 struct MOJO_ALIGNAS(8) MessageHeader {
25 // The number of serialized dispatchers included in this header. 26 // The number of serialized dispatchers included in this header.
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 return Type::MESSAGE_PIPE; 91 return Type::MESSAGE_PIPE;
91 } 92 }
92 93
93 MojoResult MessagePipeDispatcher::Close() { 94 MojoResult MessagePipeDispatcher::Close() {
94 base::AutoLock lock(signal_lock_); 95 base::AutoLock lock(signal_lock_);
95 DVLOG(1) << "Closing message pipe " << pipe_id_ << " endpoint " << endpoint_ 96 DVLOG(1) << "Closing message pipe " << pipe_id_ << " endpoint " << endpoint_
96 << " [port=" << port_.name() << "]"; 97 << " [port=" << port_.name() << "]";
97 return CloseNoLock(); 98 return CloseNoLock();
98 } 99 }
99 100
101 MojoResult MessagePipeDispatcher::Watch(MojoHandleSignals signals,
102 const Watcher::WatchCallback& callback,
103 uintptr_t context) {
104 base::AutoLock lock(signal_lock_);
105
106 if (port_closed_ || in_transit_)
107 return MOJO_RESULT_INVALID_ARGUMENT;
108
109 return awakables_.AddWatcher(
110 signals, callback, context, GetHandleSignalsStateNoLock());
111 }
112
113 MojoResult MessagePipeDispatcher::CancelWatch(uintptr_t context) {
114 base::AutoLock lock(signal_lock_);
115
116 if (port_closed_ || in_transit_)
117 return MOJO_RESULT_INVALID_ARGUMENT;
118
119 return awakables_.RemoveWatcher(context);
120 }
121
100 MojoResult MessagePipeDispatcher::WriteMessage( 122 MojoResult MessagePipeDispatcher::WriteMessage(
101 const void* bytes, 123 const void* bytes,
102 uint32_t num_bytes, 124 uint32_t num_bytes,
103 const DispatcherInTransit* dispatchers, 125 const DispatcherInTransit* dispatchers,
104 uint32_t num_dispatchers, 126 uint32_t num_dispatchers,
105 MojoWriteMessageFlags flags) { 127 MojoWriteMessageFlags flags) {
106 128
107 { 129 {
108 base::AutoLock lock(signal_lock_); 130 base::AutoLock lock(signal_lock_);
109 if (port_closed_ || in_transit_) 131 if (port_closed_ || in_transit_)
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_WRITABLE; 594 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_WRITABLE;
573 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_READABLE; 595 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_READABLE;
574 } else { 596 } else {
575 rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED; 597 rv.satisfied_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED;
576 } 598 }
577 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED; 599 rv.satisfiable_signals |= MOJO_HANDLE_SIGNAL_PEER_CLOSED;
578 return rv; 600 return rv;
579 } 601 }
580 602
581 void MessagePipeDispatcher::OnPortStatusChanged() { 603 void MessagePipeDispatcher::OnPortStatusChanged() {
604 RequestContext request_context;
605
582 base::AutoLock lock(signal_lock_); 606 base::AutoLock lock(signal_lock_);
583 607
584 // We stop observing our port as soon as it's transferred, but this can race 608 // We stop observing our port as soon as it's transferred, but this can race
585 // with events which are raised right before that happens. This is fine to 609 // with events which are raised right before that happens. This is fine to
586 // ignore. 610 // ignore.
587 if (port_transferred_) 611 if (port_transferred_)
588 return; 612 return;
589 613
590 #if !defined(NDEBUG) 614 #if !defined(NDEBUG)
591 ports::PortStatus port_status; 615 ports::PortStatus port_status;
(...skipping 14 matching lines...) Expand all
606 DVLOG(1) << "Peer closure detected on message pipe " << pipe_id_ 630 DVLOG(1) << "Peer closure detected on message pipe " << pipe_id_
607 << " endpoint " << endpoint_ << " [port=" << port_.name() << "]"; 631 << " endpoint " << endpoint_ << " [port=" << port_.name() << "]";
608 } 632 }
609 #endif 633 #endif
610 634
611 awakables_.AwakeForStateChange(GetHandleSignalsStateNoLock()); 635 awakables_.AwakeForStateChange(GetHandleSignalsStateNoLock());
612 } 636 }
613 637
614 } // namespace edk 638 } // namespace edk
615 } // namespace mojo 639 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/message_pipe_dispatcher.h ('k') | mojo/edk/system/request_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698