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/raw_channel.h" | 5 #include "mojo/edk/system/raw_channel.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <sys/uio.h> | 8 #include <sys/uio.h> |
9 #include <unistd.h> | 9 #include <unistd.h> |
10 | 10 |
11 #include <algorithm> | 11 #include <algorithm> |
12 #include <deque> | 12 #include <deque> |
13 #include <iterator> | 13 #include <iterator> |
14 #include <memory> | 14 #include <memory> |
15 #include <utility> | 15 #include <utility> |
16 #include <vector> | 16 #include <vector> |
17 | 17 |
18 #include "base/logging.h" | 18 #include "base/logging.h" |
19 #include "base/memory/weak_ptr.h" | |
20 #include "mojo/edk/embedder/platform_channel_utils.h" | 19 #include "mojo/edk/embedder/platform_channel_utils.h" |
21 #include "mojo/edk/platform/platform_handle.h" | 20 #include "mojo/edk/platform/platform_handle.h" |
22 #include "mojo/edk/platform/platform_handle_watcher.h" | 21 #include "mojo/edk/platform/platform_handle_watcher.h" |
23 #include "mojo/edk/platform/scoped_platform_handle.h" | 22 #include "mojo/edk/platform/scoped_platform_handle.h" |
24 #include "mojo/edk/system/transport_data.h" | 23 #include "mojo/edk/system/transport_data.h" |
25 #include "mojo/edk/util/make_unique.h" | 24 #include "mojo/edk/util/make_unique.h" |
| 25 #include "mojo/edk/util/weak_ptr.h" |
26 #include "mojo/public/cpp/system/macros.h" | 26 #include "mojo/public/cpp/system/macros.h" |
27 | 27 |
28 using mojo::platform::PlatformHandle; | 28 using mojo::platform::PlatformHandle; |
29 using mojo::platform::PlatformHandleWatcher; | 29 using mojo::platform::PlatformHandleWatcher; |
30 using mojo::platform::ScopedPlatformHandle; | 30 using mojo::platform::ScopedPlatformHandle; |
31 using mojo::util::MakeUnique; | 31 using mojo::util::MakeUnique; |
32 using mojo::util::MutexLocker; | 32 using mojo::util::MutexLocker; |
| 33 using mojo::util::WeakPtrFactory; |
33 | 34 |
34 namespace mojo { | 35 namespace mojo { |
35 namespace system { | 36 namespace system { |
36 | 37 |
37 namespace { | 38 namespace { |
38 | 39 |
39 class RawChannelPosix final : public RawChannel { | 40 class RawChannelPosix final : public RawChannel { |
40 public: | 41 public: |
41 explicit RawChannelPosix(ScopedPlatformHandle handle); | 42 explicit RawChannelPosix(ScopedPlatformHandle handle); |
42 ~RawChannelPosix() override; | 43 ~RawChannelPosix() override; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 std::unique_ptr<PlatformHandleWatcher::WatchToken> write_watch_token_; | 83 std::unique_ptr<PlatformHandleWatcher::WatchToken> write_watch_token_; |
83 | 84 |
84 bool pending_read_; | 85 bool pending_read_; |
85 | 86 |
86 std::deque<ScopedPlatformHandle> read_platform_handles_; | 87 std::deque<ScopedPlatformHandle> read_platform_handles_; |
87 | 88 |
88 bool pending_write_ MOJO_GUARDED_BY(write_mutex()); | 89 bool pending_write_ MOJO_GUARDED_BY(write_mutex()); |
89 | 90 |
90 // This is used for posting tasks from write threads to the I/O thread. The | 91 // This is used for posting tasks from write threads to the I/O thread. The |
91 // weak pointers it produces are only used/invalidated on the I/O thread. | 92 // weak pointers it produces are only used/invalidated on the I/O thread. |
92 base::WeakPtrFactory<RawChannelPosix> weak_ptr_factory_ | 93 WeakPtrFactory<RawChannelPosix> weak_ptr_factory_ |
93 MOJO_GUARDED_BY(write_mutex()); | 94 MOJO_GUARDED_BY(write_mutex()); |
94 | 95 |
95 MOJO_DISALLOW_COPY_AND_ASSIGN(RawChannelPosix); | 96 MOJO_DISALLOW_COPY_AND_ASSIGN(RawChannelPosix); |
96 }; | 97 }; |
97 | 98 |
98 RawChannelPosix::RawChannelPosix(ScopedPlatformHandle handle) | 99 RawChannelPosix::RawChannelPosix(ScopedPlatformHandle handle) |
99 : fd_(handle.Pass()), | 100 : fd_(handle.Pass()), |
100 pending_read_(false), | 101 pending_read_(false), |
101 pending_write_(false), | 102 pending_write_(false), |
102 weak_ptr_factory_(this) { | 103 weak_ptr_factory_(this) { |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 // ----------------------------------------------------------------------------- | 476 // ----------------------------------------------------------------------------- |
476 | 477 |
477 // Static factory method declared in raw_channel.h. | 478 // Static factory method declared in raw_channel.h. |
478 // static | 479 // static |
479 std::unique_ptr<RawChannel> RawChannel::Create(ScopedPlatformHandle handle) { | 480 std::unique_ptr<RawChannel> RawChannel::Create(ScopedPlatformHandle handle) { |
480 return MakeUnique<RawChannelPosix>(handle.Pass()); | 481 return MakeUnique<RawChannelPosix>(handle.Pass()); |
481 } | 482 } |
482 | 483 |
483 } // namespace system | 484 } // namespace system |
484 } // namespace mojo | 485 } // namespace mojo |
OLD | NEW |