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

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

Issue 1942423002: EDK: Move DispatcherTransport to handle_transport.*. (Closed) Base URL: https://github.com/domokit/mojo.git@work789_edk_handle_9
Patch Set: rebased Created 4 years, 7 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/dispatcher.h ('k') | mojo/edk/system/handle_table.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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/dispatcher.h" 5 #include "mojo/edk/system/dispatcher.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "mojo/edk/system/configuration.h" 8 #include "mojo/edk/system/configuration.h"
9 #include "mojo/edk/system/data_pipe_consumer_dispatcher.h" 9 #include "mojo/edk/system/data_pipe_consumer_dispatcher.h"
10 #include "mojo/edk/system/data_pipe_producer_dispatcher.h" 10 #include "mojo/edk/system/data_pipe_producer_dispatcher.h"
11 #include "mojo/edk/system/handle_transport.h"
11 #include "mojo/edk/system/message_pipe_dispatcher.h" 12 #include "mojo/edk/system/message_pipe_dispatcher.h"
12 #include "mojo/edk/system/platform_handle_dispatcher.h" 13 #include "mojo/edk/system/platform_handle_dispatcher.h"
13 #include "mojo/edk/system/shared_buffer_dispatcher.h" 14 #include "mojo/edk/system/shared_buffer_dispatcher.h"
14 15
15 using mojo::platform::PlatformSharedBufferMapping; 16 using mojo::platform::PlatformSharedBufferMapping;
16 using mojo::platform::ScopedPlatformHandle; 17 using mojo::platform::ScopedPlatformHandle;
17 using mojo::util::MutexLocker; 18 using mojo::util::MutexLocker;
18 using mojo::util::RefPtr; 19 using mojo::util::RefPtr;
19 20
20 namespace mojo { 21 namespace mojo {
21 namespace system { 22 namespace system {
22 23
23 namespace test { 24 namespace test {
24 25
25 // TODO(vtl): Maybe this should be defined in a test-only file instead. 26 // TODO(vtl): Maybe this should be defined in a test-only file instead.
26 DispatcherTransport DispatcherTryStartTransport(Dispatcher* dispatcher) { 27 DispatcherTransport DispatcherTryStartTransport(Dispatcher* dispatcher) {
27 return Dispatcher::HandleTableAccess::TryStartTransport(dispatcher); 28 return Dispatcher::HandleTableAccess::TryStartTransport(dispatcher);
28 } 29 }
29 30
30 } // namespace test 31 } // namespace test
31 32
32 // Dispatcher ------------------------------------------------------------------
33
34 // TODO(vtl): The thread-safety analyzer isn't smart enough to deal with the 33 // TODO(vtl): The thread-safety analyzer isn't smart enough to deal with the
35 // fact that we give up if |TryLock()| fails. 34 // fact that we give up if |TryLock()| fails.
36 // static 35 // static
37 DispatcherTransport Dispatcher::HandleTableAccess::TryStartTransport( 36 DispatcherTransport Dispatcher::HandleTableAccess::TryStartTransport(
38 Dispatcher* dispatcher) MOJO_NO_THREAD_SAFETY_ANALYSIS { 37 Dispatcher* dispatcher) MOJO_NO_THREAD_SAFETY_ANALYSIS {
39 DCHECK(dispatcher); 38 DCHECK(dispatcher);
40 39
41 if (!dispatcher->mutex_.TryLock()) 40 if (!dispatcher->mutex_.TryLock())
42 return DispatcherTransport(); 41 return DispatcherTransport();
43 42
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 MutexLocker locker(&mutex_); 292 MutexLocker locker(&mutex_);
294 if (is_closed_) { 293 if (is_closed_) {
295 if (handle_signals_state) 294 if (handle_signals_state)
296 *handle_signals_state = HandleSignalsState(); 295 *handle_signals_state = HandleSignalsState();
297 return; 296 return;
298 } 297 }
299 298
300 RemoveAwakableImplNoLock(awakable, handle_signals_state); 299 RemoveAwakableImplNoLock(awakable, handle_signals_state);
301 } 300 }
302 301
303 Dispatcher::Dispatcher() : is_closed_(false) { 302 Dispatcher::Dispatcher() : is_closed_(false) {}
304 }
305 303
306 Dispatcher::~Dispatcher() { 304 Dispatcher::~Dispatcher() {
307 // Make sure that |Close()| was called. 305 // Make sure that |Close()| was called.
308 DCHECK(is_closed_); 306 DCHECK(is_closed_);
309 } 307 }
310 308
311 void Dispatcher::CancelAllAwakablesNoLock() { 309 void Dispatcher::CancelAllAwakablesNoLock() {
312 mutex_.AssertHeld(); 310 mutex_.AssertHeld();
313 DCHECK(is_closed_); 311 DCHECK(is_closed_);
314 // By default, waiting isn't supported. Only dispatchers that can be waited on 312 // By default, waiting isn't supported. Only dispatchers that can be waited on
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 // See the comment above |EndSerializeAndCloseImplNoLock()|. In brief: Locking 564 // See the comment above |EndSerializeAndCloseImplNoLock()|. In brief: Locking
567 // isn't actually needed, but we need to satisfy assertions (which we don't 565 // isn't actually needed, but we need to satisfy assertions (which we don't
568 // want to remove or weaken). 566 // want to remove or weaken).
569 MutexLocker locker(&mutex_); 567 MutexLocker locker(&mutex_);
570 #endif 568 #endif
571 569
572 return EndSerializeAndCloseImplNoLock(channel, destination, actual_size, 570 return EndSerializeAndCloseImplNoLock(channel, destination, actual_size,
573 platform_handles); 571 platform_handles);
574 } 572 }
575 573
576 // DispatcherTransport ---------------------------------------------------------
577
578 void DispatcherTransport::End() {
579 DCHECK(dispatcher_);
580 dispatcher_->mutex_.Unlock();
581 dispatcher_ = nullptr;
582 }
583
584 } // namespace system 574 } // namespace system
585 } // namespace mojo 575 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/dispatcher.h ('k') | mojo/edk/system/handle_table.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698