| OLD | NEW |
| 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.h" |
| 11 #include "mojo/edk/system/handle_transport.h" | 12 #include "mojo/edk/system/handle_transport.h" |
| 12 #include "mojo/edk/system/message_pipe_dispatcher.h" | 13 #include "mojo/edk/system/message_pipe_dispatcher.h" |
| 13 #include "mojo/edk/system/platform_handle_dispatcher.h" | 14 #include "mojo/edk/system/platform_handle_dispatcher.h" |
| 14 #include "mojo/edk/system/shared_buffer_dispatcher.h" | 15 #include "mojo/edk/system/shared_buffer_dispatcher.h" |
| 15 | 16 |
| 16 using mojo::platform::PlatformSharedBufferMapping; | 17 using mojo::platform::PlatformSharedBufferMapping; |
| 17 using mojo::platform::ScopedPlatformHandle; | 18 using mojo::platform::ScopedPlatformHandle; |
| 18 using mojo::util::MutexLocker; | 19 using mojo::util::MutexLocker; |
| 19 using mojo::util::RefPtr; | 20 using mojo::util::RefPtr; |
| 20 | 21 |
| 21 namespace mojo { | 22 namespace mojo { |
| 22 namespace system { | 23 namespace system { |
| 23 | 24 |
| 24 namespace test { | 25 namespace test { |
| 25 | 26 |
| 26 // TODO(vtl): Maybe this should be defined in a test-only file instead. | 27 // TODO(vtl): Maybe this should be defined in a test-only file instead. |
| 27 DispatcherTransport DispatcherTryStartTransport(Dispatcher* dispatcher) { | 28 DispatcherTransport HandleTryStartTransport(const Handle& handle) { |
| 28 return Dispatcher::HandleTableAccess::TryStartTransport(dispatcher); | 29 return Dispatcher::HandleTableAccess::TryStartTransport(handle); |
| 29 } | 30 } |
| 30 | 31 |
| 31 } // namespace test | 32 } // namespace test |
| 32 | 33 |
| 33 // TODO(vtl): The thread-safety analyzer isn't smart enough to deal with the | 34 // TODO(vtl): The thread-safety analyzer isn't smart enough to deal with the |
| 34 // fact that we give up if |TryLock()| fails. | 35 // fact that we give up if |TryLock()| fails. |
| 35 // static | 36 // static |
| 36 DispatcherTransport Dispatcher::HandleTableAccess::TryStartTransport( | 37 DispatcherTransport Dispatcher::HandleTableAccess::TryStartTransport( |
| 37 Dispatcher* dispatcher) MOJO_NO_THREAD_SAFETY_ANALYSIS { | 38 const Handle& handle) MOJO_NO_THREAD_SAFETY_ANALYSIS { |
| 38 DCHECK(dispatcher); | 39 DCHECK(handle.dispatcher); |
| 39 | 40 |
| 40 if (!dispatcher->mutex_.TryLock()) | 41 if (!handle.dispatcher->mutex_.TryLock()) |
| 41 return DispatcherTransport(); | 42 return DispatcherTransport(); |
| 42 | 43 |
| 43 // We shouldn't race with things that close dispatchers, since closing can | 44 // We shouldn't race with things that close dispatchers, since closing can |
| 44 // only take place either under |handle_table_mutex_| or when the handle is | 45 // only take place either under |handle_table_mutex_| or when the handle is |
| 45 // marked as busy. | 46 // marked as busy. |
| 46 DCHECK(!dispatcher->is_closed_); | 47 DCHECK(!handle.dispatcher->is_closed_); |
| 47 | 48 |
| 48 return DispatcherTransport(dispatcher); | 49 return DispatcherTransport(handle); |
| 49 } | 50 } |
| 50 | 51 |
| 51 // static | 52 // static |
| 52 void Dispatcher::TransportDataAccess::StartSerialize( | 53 void Dispatcher::TransportDataAccess::StartSerialize( |
| 53 Dispatcher* dispatcher, | 54 Dispatcher* dispatcher, |
| 54 Channel* channel, | 55 Channel* channel, |
| 55 size_t* max_size, | 56 size_t* max_size, |
| 56 size_t* max_platform_handles) { | 57 size_t* max_platform_handles) { |
| 57 DCHECK(dispatcher); | 58 DCHECK(dispatcher); |
| 58 dispatcher->StartSerialize(channel, max_size, max_platform_handles); | 59 dispatcher->StartSerialize(channel, max_size, max_platform_handles); |
| (...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 // want to remove or weaken). | 567 // want to remove or weaken). |
| 567 MutexLocker locker(&mutex_); | 568 MutexLocker locker(&mutex_); |
| 568 #endif | 569 #endif |
| 569 | 570 |
| 570 return EndSerializeAndCloseImplNoLock(channel, destination, actual_size, | 571 return EndSerializeAndCloseImplNoLock(channel, destination, actual_size, |
| 571 platform_handles); | 572 platform_handles); |
| 572 } | 573 } |
| 573 | 574 |
| 574 } // namespace system | 575 } // namespace system |
| 575 } // namespace mojo | 576 } // namespace mojo |
| OLD | NEW |