EDK: Convert most uses of PlatformHandleVector to std::vector<ScopedPlatformHandle>.
(And ScopedPlatformHandleVectorPtr to
std::unique_ptr<std::vector<ScopedPlatformHandle>>.)
There are a few more uses, but this change is already too big.
R=vardhan@google.com
Review URL: https://codereview.chromium.org/1478503003 .
diff --git a/mojo/edk/embedder/platform_channel_pair_unittest.cc b/mojo/edk/embedder/platform_channel_pair_unittest.cc
index 20b9a7a..a84072a 100644
--- a/mojo/edk/embedder/platform_channel_pair_unittest.cc
+++ b/mojo/edk/embedder/platform_channel_pair_unittest.cc
@@ -118,7 +118,7 @@
WaitReadable(client_handle.get());
char buf[10000] = {};
- std::deque<PlatformHandle> received_handles;
+ std::deque<ScopedPlatformHandle> received_handles;
ssize_t result = PlatformChannelRecvmsg(client_handle.get(), buf,
sizeof(buf), &received_handles);
EXPECT_EQ(static_cast<ssize_t>(send_string.size()), result);
@@ -168,7 +168,7 @@
WaitReadable(client_handle.get());
char buf[10000] = {};
- std::deque<PlatformHandle> received_handles;
+ std::deque<ScopedPlatformHandle> received_handles;
// We assume that the |recvmsg()| actually reads all the data.
EXPECT_EQ(static_cast<ssize_t>(sizeof(kHello)),
PlatformChannelRecvmsg(client_handle.get(), buf, sizeof(buf),
@@ -178,7 +178,7 @@
for (size_t j = 0; !received_handles.empty(); j++) {
util::ScopedFILE fp(test::FILEFromPlatformHandle(
- ScopedPlatformHandle(received_handles.front()), "rb"));
+ std::move(received_handles.front()), "rb"));
received_handles.pop_front();
ASSERT_TRUE(fp);
rewind(fp.get());
@@ -223,8 +223,8 @@
WaitReadable(client_handle.get());
// Start with an invalid handle in the deque.
- std::deque<PlatformHandle> received_handles;
- received_handles.push_back(PlatformHandle());
+ std::deque<ScopedPlatformHandle> received_handles;
+ received_handles.push_back(ScopedPlatformHandle());
char buf[100] = {};
// We assume that the |recvmsg()| actually reads all the data.
@@ -237,9 +237,8 @@
EXPECT_TRUE(received_handles[1].is_valid());
{
- util::ScopedFILE fp(test::FILEFromPlatformHandle(
- ScopedPlatformHandle(received_handles[1]), "rb"));
- received_handles[1] = PlatformHandle();
+ util::ScopedFILE fp(
+ test::FILEFromPlatformHandle(std::move(received_handles[1]), "rb"));
ASSERT_TRUE(fp);
rewind(fp.get());
char read_buf[100];
diff --git a/mojo/edk/embedder/platform_channel_utils.cc b/mojo/edk/embedder/platform_channel_utils.cc
index 71c1159..85af2e4 100644
--- a/mojo/edk/embedder/platform_channel_utils.cc
+++ b/mojo/edk/embedder/platform_channel_utils.cc
@@ -139,10 +139,11 @@
return true;
}
-ssize_t PlatformChannelRecvmsg(PlatformHandle h,
- void* buf,
- size_t num_bytes,
- std::deque<PlatformHandle>* platform_handles) {
+ssize_t PlatformChannelRecvmsg(
+ PlatformHandle h,
+ void* buf,
+ size_t num_bytes,
+ std::deque<ScopedPlatformHandle>* platform_handles) {
DCHECK(buf);
DCHECK_GT(num_bytes, 0u);
DCHECK(platform_handles);
@@ -173,7 +174,8 @@
size_t num_fds = payload_length / sizeof(int);
const int* fds = reinterpret_cast<int*>(CMSG_DATA(cmsg));
for (size_t i = 0; i < num_fds; i++) {
- platform_handles->push_back(PlatformHandle(fds[i]));
+ platform_handles->push_back(
+ ScopedPlatformHandle(PlatformHandle(fds[i])));
DCHECK(platform_handles->back().is_valid());
}
}
diff --git a/mojo/edk/embedder/platform_channel_utils.h b/mojo/edk/embedder/platform_channel_utils.h
index 8458b06..94e2f5c 100644
--- a/mojo/edk/embedder/platform_channel_utils.h
+++ b/mojo/edk/embedder/platform_channel_utils.h
@@ -11,6 +11,7 @@
#include <deque>
#include "mojo/edk/embedder/platform_handle.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
struct iovec; // Declared in <sys/uio.h>.
@@ -61,12 +62,13 @@
size_t num_handles);
// Wrapper around |recvmsg()|, which will extract any attached file descriptors
-// (in the control message) to |PlatformHandle|s (and append them to
+// (in the control message) to |ScopedPlatformHandle|s (and append them to
// |platform_handles|). (This also handles |EINTR|.)
-ssize_t PlatformChannelRecvmsg(PlatformHandle h,
- void* buf,
- size_t num_bytes,
- std::deque<PlatformHandle>* platform_handles);
+ssize_t PlatformChannelRecvmsg(
+ PlatformHandle h,
+ void* buf,
+ size_t num_bytes,
+ std::deque<ScopedPlatformHandle>* platform_handles);
} // namespace embedder
} // namespace mojo
diff --git a/mojo/edk/system/channel.cc b/mojo/edk/system/channel.cc
index b13d08c..2e1b96c 100644
--- a/mojo/edk/system/channel.cc
+++ b/mojo/edk/system/channel.cc
@@ -14,6 +14,7 @@
#include "mojo/edk/system/endpoint_relayer.h"
#include "mojo/edk/system/transport_data.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MakeRefCounted;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -295,7 +296,7 @@
void Channel::OnReadMessage(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
DCHECK(thread_checker_.IsCreationThreadCurrent());
#endif // !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
@@ -352,7 +353,7 @@
void Channel::OnReadMessageForEndpoint(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
DCHECK(thread_checker_.IsCreationThreadCurrent());
#endif // !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
@@ -415,7 +416,7 @@
void Channel::OnReadMessageForChannel(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
#if !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
DCHECK(thread_checker_.IsCreationThreadCurrent());
#endif // !defined(NDEBUG) || defined(DCHECK_ALWAYS_ON)
diff --git a/mojo/edk/system/channel.h b/mojo/edk/system/channel.h
index 1780205..166e385 100644
--- a/mojo/edk/system/channel.h
+++ b/mojo/edk/system/channel.h
@@ -191,16 +191,19 @@
// |RawChannel::Delegate| implementation (only called on the creation thread):
void OnReadMessage(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) override;
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles) override;
void OnError(Error error) override;
// Helpers for |OnReadMessage| (only called on the creation thread):
void OnReadMessageForEndpoint(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles);
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles);
void OnReadMessageForChannel(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles);
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles);
// Handles "attach and run endpoint" messages.
bool OnAttachAndRunEndpoint(ChannelEndpointId local_id,
diff --git a/mojo/edk/system/data_pipe.cc b/mojo/edk/system/data_pipe.cc
index 109f1ac..3efd6db 100644
--- a/mojo/edk/system/data_pipe.cc
+++ b/mojo/edk/system/data_pipe.cc
@@ -25,6 +25,7 @@
#include "mojo/edk/system/remote_producer_data_pipe_impl.h"
#include "mojo/edk/util/make_unique.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -416,7 +417,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
MutexLocker locker(&mutex_);
DCHECK(has_local_producer_no_lock());
// Warning: After |ProducerEndSerialize()|, quite probably |impl_| has
@@ -625,7 +626,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
MutexLocker locker(&mutex_);
DCHECK(has_local_consumer_no_lock());
// Warning: After |ConsumerEndSerialize()|, quite probably |impl_| has
diff --git a/mojo/edk/system/data_pipe.h b/mojo/edk/system/data_pipe.h
index 0d77668..866ad9d 100644
--- a/mojo/edk/system/data_pipe.h
+++ b/mojo/edk/system/data_pipe.h
@@ -8,8 +8,9 @@
#include <stdint.h>
#include <memory>
+#include <vector>
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/channel_endpoint_client.h"
#include "mojo/edk/system/handle_signals_state.h"
#include "mojo/edk/system/memory.h"
@@ -119,10 +120,11 @@
void ProducerStartSerialize(Channel* channel,
size_t* max_size,
size_t* max_platform_handles);
- bool ProducerEndSerialize(Channel* channel,
- void* destination,
- size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles);
+ bool ProducerEndSerialize(
+ Channel* channel,
+ void* destination,
+ size_t* actual_size,
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles);
bool ProducerIsBusy() const;
// These are called by the consumer dispatcher to implement its methods of
@@ -151,10 +153,11 @@
void ConsumerStartSerialize(Channel* channel,
size_t* max_size,
size_t* max_platform_handles);
- bool ConsumerEndSerialize(Channel* channel,
- void* destination,
- size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles);
+ bool ConsumerEndSerialize(
+ Channel* channel,
+ void* destination,
+ size_t* actual_size,
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles);
bool ConsumerIsBusy() const;
// The following are only to be used by |DataPipeImpl| (and its subclasses):
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.cc b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
index 490b917..b0101e3 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.cc
@@ -10,6 +10,7 @@
#include "mojo/edk/system/data_pipe.h"
#include "mojo/edk/system/memory.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -161,7 +162,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
AssertHasOneRef(); // Only one ref => no need to take the lock.
bool rv = data_pipe_->ConsumerEndSerialize(channel, destination, actual_size,
diff --git a/mojo/edk/system/data_pipe_consumer_dispatcher.h b/mojo/edk/system/data_pipe_consumer_dispatcher.h
index 9f2389d..f650c7b 100644
--- a/mojo/edk/system/data_pipe_consumer_dispatcher.h
+++ b/mojo/edk/system/data_pipe_consumer_dispatcher.h
@@ -69,7 +69,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
MOJO_NOT_THREAD_SAFE;
bool IsBusyNoLock() const override;
diff --git a/mojo/edk/system/data_pipe_impl.h b/mojo/edk/system/data_pipe_impl.h
index e25b697..4596a62 100644
--- a/mojo/edk/system/data_pipe_impl.h
+++ b/mojo/edk/system/data_pipe_impl.h
@@ -8,8 +8,9 @@
#include <stdint.h>
#include <utility>
+#include <vector>
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/data_pipe.h"
#include "mojo/edk/system/handle_signals_state.h"
#include "mojo/edk/system/memory.h"
@@ -75,7 +76,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) = 0;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) = 0;
virtual void ConsumerClose() = 0;
// |num_bytes.Get()| will be a nonzero multiple of |element_num_bytes()|.
@@ -102,7 +103,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) = 0;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) = 0;
virtual bool OnReadMessage(unsigned port, MessageInTransit* message) = 0;
virtual void OnDetachFromChannel(unsigned port) = 0;
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.cc b/mojo/edk/system/data_pipe_producer_dispatcher.cc
index 814fa59..c08bd88 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.cc
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.cc
@@ -10,6 +10,7 @@
#include "mojo/edk/system/data_pipe.h"
#include "mojo/edk/system/memory.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -137,7 +138,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
AssertHasOneRef(); // Only one ref => no need to take the lock.
bool rv = data_pipe_->ProducerEndSerialize(channel, destination, actual_size,
diff --git a/mojo/edk/system/data_pipe_producer_dispatcher.h b/mojo/edk/system/data_pipe_producer_dispatcher.h
index 9251ce1..6118449 100644
--- a/mojo/edk/system/data_pipe_producer_dispatcher.h
+++ b/mojo/edk/system/data_pipe_producer_dispatcher.h
@@ -69,7 +69,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
MOJO_NOT_THREAD_SAFE;
bool IsBusyNoLock() const override;
diff --git a/mojo/edk/system/dispatcher.cc b/mojo/edk/system/dispatcher.cc
index ea88870..9433ccc 100644
--- a/mojo/edk/system/dispatcher.cc
+++ b/mojo/edk/system/dispatcher.cc
@@ -12,6 +12,7 @@
#include "mojo/edk/system/platform_handle_dispatcher.h"
#include "mojo/edk/system/shared_buffer_dispatcher.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -63,7 +64,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
DCHECK(dispatcher);
return dispatcher->EndSerializeAndClose(channel, destination, actual_size,
platform_handles);
@@ -75,7 +76,7 @@
int32_t type,
const void* source,
size_t size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
switch (static_cast<Dispatcher::Type>(type)) {
case Type::UNKNOWN:
DVLOG(2) << "Deserializing invalid handle";
@@ -412,7 +413,7 @@
Channel* /*channel*/,
void* /*destination*/,
size_t* /*actual_size*/,
- embedder::PlatformHandleVector* /*platform_handles*/) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
AssertHasOneRef(); // Only one ref => no need to take the lock.
DCHECK(is_closed_);
// By default, serializing isn't supported, so just close.
@@ -461,7 +462,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
DCHECK(channel);
DCHECK(actual_size);
AssertHasOneRef(); // Only one ref => no need to take the lock.
diff --git a/mojo/edk/system/dispatcher.h b/mojo/edk/system/dispatcher.h
index e425bb3..b9bb895 100644
--- a/mojo/edk/system/dispatcher.h
+++ b/mojo/edk/system/dispatcher.h
@@ -12,7 +12,7 @@
#include <ostream>
#include <vector>
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/handle_signals_state.h"
#include "mojo/edk/system/memory.h"
#include "mojo/edk/util/mutex.h"
@@ -200,7 +200,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles);
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles);
// Deserialization API.
// Note: This "clears" (i.e., reset to the invalid handle) any platform
@@ -210,7 +210,7 @@
int32_t type,
const void* source,
size_t size,
- embedder::PlatformHandleVector* platform_handles);
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles);
};
protected:
@@ -304,7 +304,8 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) MOJO_NOT_THREAD_SAFE;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles)
+ MOJO_NOT_THREAD_SAFE;
// This should be overridden to return true if/when there's an ongoing
// operation (e.g., two-phase read/writes on data pipes) that should prevent a
@@ -371,8 +372,8 @@
bool EndSerializeAndClose(Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles)
- MOJO_NOT_THREAD_SAFE;
+ std::vector<embedder::ScopedPlatformHandle>*
+ platform_handles) MOJO_NOT_THREAD_SAFE;
// This protects the following members as well as any state added by
// subclasses.
diff --git a/mojo/edk/system/local_data_pipe_impl.cc b/mojo/edk/system/local_data_pipe_impl.cc
index d4330ae..565d4af 100644
--- a/mojo/edk/system/local_data_pipe_impl.cc
+++ b/mojo/edk/system/local_data_pipe_impl.cc
@@ -25,6 +25,7 @@
#include "mojo/edk/system/remote_producer_data_pipe_impl.h"
#include "mojo/edk/util/make_unique.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::RefPtr;
namespace mojo {
@@ -164,7 +165,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
SerializedDataPipeProducerDispatcher* s =
static_cast<SerializedDataPipeProducerDispatcher*>(destination);
s->validated_options = validated_options();
@@ -336,7 +337,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
SerializedDataPipeConsumerDispatcher* s =
static_cast<SerializedDataPipeConsumerDispatcher*>(destination);
s->validated_options = validated_options();
diff --git a/mojo/edk/system/local_data_pipe_impl.h b/mojo/edk/system/local_data_pipe_impl.h
index aa14590..b4f513e 100644
--- a/mojo/edk/system/local_data_pipe_impl.h
+++ b/mojo/edk/system/local_data_pipe_impl.h
@@ -43,7 +43,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
void ConsumerClose() override;
MojoResult ConsumerReadData(UserPointer<void> elements,
UserPointer<uint32_t> num_bytes,
@@ -66,7 +66,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
bool OnReadMessage(unsigned port, MessageInTransit* message) override;
void OnDetachFromChannel(unsigned port) override;
diff --git a/mojo/edk/system/master_connection_manager.cc b/mojo/edk/system/master_connection_manager.cc
index 4e78897..19f2d5d 100644
--- a/mojo/edk/system/master_connection_manager.cc
+++ b/mojo/edk/system/master_connection_manager.cc
@@ -7,6 +7,7 @@
#include <memory>
#include <unordered_map>
#include <utility>
+#include <vector>
#include "base/bind.h"
#include "base/bind_helpers.h"
@@ -17,6 +18,7 @@
#include "mojo/edk/embedder/platform_channel_pair.h"
#include "mojo/edk/embedder/platform_handle.h"
#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/connection_manager_messages.h"
#include "mojo/edk/system/message_in_transit.h"
#include "mojo/edk/system/raw_channel.h"
@@ -25,8 +27,10 @@
#include "mojo/edk/util/waitable_event.h"
#include "mojo/public/cpp/system/macros.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::platform::TaskRunner;
using mojo::util::AutoResetWaitableEvent;
+using mojo::util::MakeUnique;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -84,9 +88,9 @@
private:
// |RawChannel::Delegate| methods:
- void OnReadMessage(
- const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) override;
+ void OnReadMessage(const MessageInTransit::View& message_view,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>>
+ platform_handles) override;
void OnError(Error error) override;
// Handles an error that's fatal to this object. Note that this probably
@@ -129,7 +133,7 @@
void MasterConnectionManager::Helper::OnReadMessage(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
if (message_view.type() != MessageInTransit::Type::CONNECTION_MANAGER) {
LOG(ERROR) << "Invalid message type " << message_view.type();
FatalError(); // WARNING: This destroys us.
@@ -199,9 +203,8 @@
DCHECK_EQ(message_view.subtype(),
MessageInTransit::Subtype::CONNECTION_MANAGER_CONNECT);
DCHECK(platform_handle.is_valid());
- embedder::ScopedPlatformHandleVectorPtr platform_handles(
- new embedder::PlatformHandleVector());
- platform_handles->push_back(platform_handle.release());
+ auto platform_handles = MakeUnique<std::vector<ScopedPlatformHandle>>();
+ platform_handles->push_back(std::move(platform_handle));
response->SetTransportData(util::MakeUnique<TransportData>(
std::move(platform_handles),
raw_channel_->GetSerializedPlatformHandleSize()));
@@ -317,6 +320,7 @@
}
private:
+ // TODO(vtl): Make |second| |ScopedPlatformHandle|s.
std::unordered_map<ProcessIdentifier, embedder::PlatformHandle>
process_connections_; // "Owns" any valid platform handles.
diff --git a/mojo/edk/system/message_pipe.cc b/mojo/edk/system/message_pipe.cc
index 5256bd3..6287426 100644
--- a/mojo/edk/system/message_pipe.cc
+++ b/mojo/edk/system/message_pipe.cc
@@ -19,6 +19,7 @@
#include "mojo/edk/system/proxy_message_pipe_endpoint.h"
#include "mojo/edk/util/make_unique.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MakeRefCounted;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -228,7 +229,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* /*platform_handles*/) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
DCHECK(port == 0 || port == 1);
MutexLocker locker(&mutex_);
diff --git a/mojo/edk/system/message_pipe.h b/mojo/edk/system/message_pipe.h
index 99b1200..4e82e03 100644
--- a/mojo/edk/system/message_pipe.h
+++ b/mojo/edk/system/message_pipe.h
@@ -11,7 +11,7 @@
#include <memory>
#include <vector>
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/channel_endpoint_client.h"
#include "mojo/edk/system/dispatcher.h"
#include "mojo/edk/system/handle_signals_state.h"
@@ -109,11 +109,12 @@
Channel* channel,
size_t* max_size,
size_t* max_platform_handles);
- bool EndSerialize(unsigned port,
- Channel* channel,
- void* destination,
- size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles);
+ bool EndSerialize(
+ unsigned port,
+ Channel* channel,
+ void* destination,
+ size_t* actual_size,
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles);
// |ChannelEndpointClient| methods:
bool OnReadMessage(unsigned port, MessageInTransit* message) override;
diff --git a/mojo/edk/system/message_pipe_dispatcher.cc b/mojo/edk/system/message_pipe_dispatcher.cc
index 704fd13..cc400d5 100644
--- a/mojo/edk/system/message_pipe_dispatcher.cc
+++ b/mojo/edk/system/message_pipe_dispatcher.cc
@@ -14,6 +14,7 @@
#include "mojo/edk/system/options_validation.h"
#include "mojo/edk/system/proxy_message_pipe_endpoint.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::RefPtr;
namespace mojo {
@@ -204,7 +205,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
AssertHasOneRef(); // Only one ref => no need to take the lock.
bool rv = message_pipe_->EndSerialize(port_, channel, destination,
diff --git a/mojo/edk/system/message_pipe_dispatcher.h b/mojo/edk/system/message_pipe_dispatcher.h
index da64649..a26fdf0 100644
--- a/mojo/edk/system/message_pipe_dispatcher.h
+++ b/mojo/edk/system/message_pipe_dispatcher.h
@@ -106,7 +106,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
MOJO_NOT_THREAD_SAFE;
// This will be null if closed.
diff --git a/mojo/edk/system/platform_handle_dispatcher.cc b/mojo/edk/system/platform_handle_dispatcher.cc
index 91c64fd..7cb7110 100644
--- a/mojo/edk/system/platform_handle_dispatcher.cc
+++ b/mojo/edk/system/platform_handle_dispatcher.cc
@@ -5,9 +5,11 @@
#include "mojo/edk/system/platform_handle_dispatcher.h"
#include <algorithm>
+#include <utility>
#include "base/logging.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -24,7 +26,7 @@
} // namespace
-embedder::ScopedPlatformHandle PlatformHandleDispatcher::PassPlatformHandle() {
+ScopedPlatformHandle PlatformHandleDispatcher::PassPlatformHandle() {
MutexLocker locker(&mutex());
return platform_handle_.Pass();
}
@@ -38,7 +40,7 @@
Channel* channel,
const void* source,
size_t size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
if (size != sizeof(SerializedPlatformHandleDispatcher)) {
LOG(ERROR) << "Invalid serialized platform handle dispatcher (bad size)";
return nullptr;
@@ -49,7 +51,7 @@
size_t platform_handle_index = serialization->platform_handle_index;
// Starts off invalid, which is what we want.
- embedder::PlatformHandle platform_handle;
+ ScopedPlatformHandle platform_handle;
if (platform_handle_index != kInvalidPlatformHandleIndex) {
if (!platform_handles ||
@@ -64,13 +66,12 @@
std::swap(platform_handle, (*platform_handles)[platform_handle_index]);
}
- return Create(embedder::ScopedPlatformHandle(platform_handle));
+ return Create(std::move(platform_handle));
}
PlatformHandleDispatcher::PlatformHandleDispatcher(
- embedder::ScopedPlatformHandle platform_handle)
- : platform_handle_(platform_handle.Pass()) {
-}
+ ScopedPlatformHandle platform_handle)
+ : platform_handle_(platform_handle.Pass()) {}
PlatformHandleDispatcher::~PlatformHandleDispatcher() {
}
@@ -99,14 +100,14 @@
Channel* /*channel*/,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
AssertHasOneRef(); // Only one ref => no need to take the lock.
SerializedPlatformHandleDispatcher* serialization =
static_cast<SerializedPlatformHandleDispatcher*>(destination);
if (platform_handle_.is_valid()) {
serialization->platform_handle_index = platform_handles->size();
- platform_handles->push_back(platform_handle_.release());
+ platform_handles->push_back(std::move(platform_handle_));
} else {
serialization->platform_handle_index = kInvalidPlatformHandleIndex;
}
diff --git a/mojo/edk/system/platform_handle_dispatcher.h b/mojo/edk/system/platform_handle_dispatcher.h
index d9b809f..16ce340 100644
--- a/mojo/edk/system/platform_handle_dispatcher.h
+++ b/mojo/edk/system/platform_handle_dispatcher.h
@@ -34,7 +34,7 @@
Channel* channel,
const void* source,
size_t size,
- embedder::PlatformHandleVector* platform_handles);
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles);
private:
explicit PlatformHandleDispatcher(
@@ -53,7 +53,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
MOJO_NOT_THREAD_SAFE;
embedder::ScopedPlatformHandle platform_handle_ MOJO_GUARDED_BY(mutex());
diff --git a/mojo/edk/system/raw_channel.cc b/mojo/edk/system/raw_channel.cc
index 16f924d..3b83a67 100644
--- a/mojo/edk/system/raw_channel.cc
+++ b/mojo/edk/system/raw_channel.cc
@@ -16,6 +16,7 @@
#include "mojo/edk/system/message_in_transit.h"
#include "mojo/edk/system/transport_data.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::MutexLocker;
namespace mojo {
@@ -58,7 +59,7 @@
if (!transport_data)
return false;
- const embedder::PlatformHandleVector* all_platform_handles =
+ const std::vector<ScopedPlatformHandle>* all_platform_handles =
transport_data->platform_handles();
if (!all_platform_handles) {
DCHECK_EQ(platform_handles_offset_, 0u);
@@ -80,11 +81,12 @@
MessageInTransit* message = message_queue_.PeekMessage();
TransportData* transport_data = message->transport_data();
- embedder::PlatformHandleVector* all_platform_handles =
+ std::vector<ScopedPlatformHandle>* all_platform_handles =
transport_data->platform_handles();
*num_platform_handles =
all_platform_handles->size() - platform_handles_offset_;
- *platform_handles = &(*all_platform_handles)[platform_handles_offset_];
+ *platform_handles = reinterpret_cast<embedder::PlatformHandle*>(
+ &(*all_platform_handles)[platform_handles_offset_]);
if (serialized_platform_handle_size_ > 0) {
size_t serialization_data_offset =
@@ -326,7 +328,7 @@
return; // |this| may have been destroyed in |CallOnError()|.
}
} else {
- embedder::ScopedPlatformHandleVectorPtr platform_handles;
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles;
if (message_view.transport_data_buffer()) {
size_t num_platform_handles;
const void* platform_handle_table;
diff --git a/mojo/edk/system/raw_channel.h b/mojo/edk/system/raw_channel.h
index beb0194..f085120 100644
--- a/mojo/edk/system/raw_channel.h
+++ b/mojo/edk/system/raw_channel.h
@@ -9,7 +9,6 @@
#include <vector>
#include "base/memory/weak_ptr.h"
-#include "mojo/edk/embedder/platform_handle_vector.h"
#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/message_in_transit.h"
#include "mojo/edk/system/message_in_transit_queue.h"
@@ -67,7 +66,8 @@
// |Shutdown()| and then (if desired) destroy it.
virtual void OnReadMessage(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) = 0;
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles) = 0;
// Called when there's a (fatal) error. This may call the |RawChannel|'s
// |Shutdown()| and then (if desired) destroy it.
@@ -261,9 +261,10 @@
// called when |num_platform_handles| is nonzero. Returns null if the
// |num_platform_handles| handles are not available. Only called on the I/O
// thread.
- virtual embedder::ScopedPlatformHandleVectorPtr GetReadPlatformHandles(
- size_t num_platform_handles,
- const void* platform_handle_table) MOJO_LOCKS_EXCLUDED(write_mutex_) = 0;
+ virtual std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ GetReadPlatformHandles(size_t num_platform_handles,
+ const void* platform_handle_table)
+ MOJO_LOCKS_EXCLUDED(write_mutex_) = 0;
// Writes contents in |write_buffer_no_lock()|.
// This class guarantees that:
diff --git a/mojo/edk/system/raw_channel_posix.cc b/mojo/edk/system/raw_channel_posix.cc
index 096d0d7..cec566b 100644
--- a/mojo/edk/system/raw_channel_posix.cc
+++ b/mojo/edk/system/raw_channel_posix.cc
@@ -10,8 +10,10 @@
#include <algorithm>
#include <deque>
+#include <iterator>
#include <memory>
#include <utility>
+#include <vector>
#include "base/bind.h"
#include "base/location.h"
@@ -20,11 +22,13 @@
#include "base/message_loop/message_loop.h"
#include "mojo/edk/embedder/platform_channel_utils.h"
#include "mojo/edk/embedder/platform_handle.h"
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/transport_data.h"
#include "mojo/edk/util/make_unique.h"
#include "mojo/public/cpp/system/macros.h"
+using mojo::embedder::ScopedPlatformHandle;
+using mojo::util::MakeUnique;
using mojo::util::MutexLocker;
namespace mojo {
@@ -52,7 +56,7 @@
const MessageInTransit::View& message_view) override;
IOResult Read(size_t* bytes_read) override;
IOResult ScheduleRead() override;
- embedder::ScopedPlatformHandleVectorPtr GetReadPlatformHandles(
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> GetReadPlatformHandles(
size_t num_platform_handles,
const void* platform_handle_table) override;
IOResult WriteNoLock(size_t* platform_handles_written,
@@ -80,7 +84,7 @@
bool pending_read_;
- std::deque<embedder::PlatformHandle> read_platform_handles_;
+ std::deque<embedder::ScopedPlatformHandle> read_platform_handles_;
bool pending_write_ MOJO_GUARDED_BY(write_mutex());
@@ -112,8 +116,6 @@
// These must have been shut down/destroyed on the I/O thread.
DCHECK(!read_watcher_);
DCHECK(!write_watcher_);
-
- embedder::CloseAllPlatformHandles(&read_platform_handles_);
}
size_t RawChannelPosix::GetSerializedPlatformHandleSize() const {
@@ -124,7 +126,7 @@
void RawChannelPosix::EnqueueMessageNoLock(
std::unique_ptr<MessageInTransit> message) {
if (message->transport_data()) {
- embedder::PlatformHandleVector* const platform_handles =
+ std::vector<ScopedPlatformHandle>* const platform_handles =
message->transport_data()->platform_handles();
if (platform_handles &&
platform_handles->size() > embedder::kPlatformChannelMaxNumHandles) {
@@ -139,11 +141,13 @@
MessageInTransit::Type::RAW_CHANNEL,
MessageInTransit::Subtype::RAW_CHANNEL_POSIX_EXTRA_PLATFORM_HANDLES,
0, nullptr));
- embedder::ScopedPlatformHandleVectorPtr fds(
- new embedder::PlatformHandleVector(
- platform_handles->begin() + i,
- platform_handles->begin() + i +
- embedder::kPlatformChannelMaxNumHandles));
+ using IteratorType = std::vector<ScopedPlatformHandle>::iterator;
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> fds(
+ MakeUnique<std::vector<ScopedPlatformHandle>>(
+ std::move_iterator<IteratorType>(platform_handles->begin() + i),
+ std::move_iterator<IteratorType>(
+ platform_handles->begin() + i +
+ embedder::kPlatformChannelMaxNumHandles)));
fd_message->SetTransportData(util::MakeUnique<TransportData>(
std::move(fds), GetSerializedPlatformHandleSize()));
RawChannel::EnqueueMessageNoLock(std::move(fd_message));
@@ -193,21 +197,21 @@
return IO_PENDING;
}
-embedder::ScopedPlatformHandleVectorPtr RawChannelPosix::GetReadPlatformHandles(
- size_t num_platform_handles,
- const void* /*platform_handle_table*/) {
+std::unique_ptr<std::vector<ScopedPlatformHandle>>
+RawChannelPosix::GetReadPlatformHandles(size_t num_platform_handles,
+ const void* /*platform_handle_table*/) {
DCHECK_GT(num_platform_handles, 0u);
if (read_platform_handles_.size() < num_platform_handles) {
- embedder::CloseAllPlatformHandles(&read_platform_handles_);
read_platform_handles_.clear();
- return embedder::ScopedPlatformHandleVectorPtr();
+ return nullptr;
}
- embedder::ScopedPlatformHandleVectorPtr rv(
- new embedder::PlatformHandleVector(num_platform_handles));
- rv->assign(read_platform_handles_.begin(),
- read_platform_handles_.begin() + num_platform_handles);
+ auto rv = MakeUnique<std::vector<ScopedPlatformHandle>>(num_platform_handles);
+ using IteratorType = std::deque<ScopedPlatformHandle>::iterator;
+ rv->assign(std::move_iterator<IteratorType>(read_platform_handles_.begin()),
+ std::move_iterator<IteratorType>(read_platform_handles_.begin() +
+ num_platform_handles));
read_platform_handles_.erase(
read_platform_handles_.begin(),
read_platform_handles_.begin() + num_platform_handles);
@@ -422,7 +426,6 @@
(TransportData::GetMaxPlatformHandles() +
embedder::kPlatformChannelMaxNumHandles)) {
LOG(ERROR) << "Received too many platform handles";
- embedder::CloseAllPlatformHandles(&read_platform_handles_);
read_platform_handles_.clear();
return IO_FAILED_UNKNOWN;
}
diff --git a/mojo/edk/system/raw_channel_unittest.cc b/mojo/edk/system/raw_channel_unittest.cc
index 202c152..a5278cb 100644
--- a/mojo/edk/system/raw_channel_unittest.cc
+++ b/mojo/edk/system/raw_channel_unittest.cc
@@ -31,7 +31,9 @@
#include "mojo/public/cpp/system/macros.h"
#include "testing/gtest/include/gtest/gtest.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::AutoResetWaitableEvent;
+using mojo::util::MakeUnique;
using mojo::util::Mutex;
using mojo::util::MutexLocker;
@@ -95,7 +97,7 @@
protected:
test::TestIOThread* io_thread() { return &io_thread_; }
- embedder::ScopedPlatformHandle handles[2];
+ ScopedPlatformHandle handles[2];
private:
test::TestIOThread io_thread_;
@@ -111,9 +113,9 @@
~WriteOnlyRawChannelDelegate() override {}
// |RawChannel::Delegate| implementation:
- void OnReadMessage(
- const MessageInTransit::View& /*message_view*/,
- embedder::ScopedPlatformHandleVectorPtr /*platform_handles*/) override {
+ void OnReadMessage(const MessageInTransit::View& /*message_view*/,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>>
+ /*platform_handles*/) override {
CHECK(false); // Should not get called.
}
void OnError(Error error) override {
@@ -224,9 +226,9 @@
~ReadCheckerRawChannelDelegate() override {}
// |RawChannel::Delegate| implementation (called on the I/O thread):
- void OnReadMessage(
- const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+ void OnReadMessage(const MessageInTransit::View& message_view,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>>
+ platform_handles) override {
EXPECT_FALSE(platform_handles);
size_t position;
@@ -339,9 +341,9 @@
~ReadCountdownRawChannelDelegate() override {}
// |RawChannel::Delegate| implementation (called on the I/O thread):
- void OnReadMessage(
- const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+ void OnReadMessage(const MessageInTransit::View& message_view,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>>
+ platform_handles) override {
EXPECT_FALSE(platform_handles);
EXPECT_LT(count_, expected_count_);
@@ -553,9 +555,9 @@
~ShutdownOnReadMessageRawChannelDelegate() override {}
// |RawChannel::Delegate| implementation (called on the I/O thread):
- void OnReadMessage(
- const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+ void OnReadMessage(const MessageInTransit::View& message_view,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>>
+ platform_handles) override {
EXPECT_FALSE(platform_handles);
EXPECT_FALSE(did_shutdown_);
EXPECT_TRUE(
@@ -629,7 +631,8 @@
// |RawChannel::Delegate| implementation (called on the I/O thread):
void OnReadMessage(
const MessageInTransit::View& /*message_view*/,
- embedder::ScopedPlatformHandleVectorPtr /*platform_handles*/) override {
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> /*platform_handles*/)
+ override {
CHECK(false); // Should not get called.
}
void OnError(Error error) override {
@@ -728,9 +731,9 @@
~ReadPlatformHandlesCheckerRawChannelDelegate() override {}
// |RawChannel::Delegate| implementation (called on the I/O thread):
- void OnReadMessage(
- const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) override {
+ void OnReadMessage(const MessageInTransit::View& message_view,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>>
+ platform_handles) override {
const char kHello[] = "hello";
EXPECT_EQ(sizeof(kHello), message_view.num_bytes());
@@ -738,9 +741,9 @@
ASSERT_TRUE(platform_handles);
ASSERT_EQ(2u, platform_handles->size());
- embedder::ScopedPlatformHandle h1(platform_handles->at(0));
+ ScopedPlatformHandle h1(std::move(platform_handles->at(0)));
EXPECT_TRUE(h1.is_valid());
- embedder::ScopedPlatformHandle h2(platform_handles->at(1));
+ ScopedPlatformHandle h2(std::move(platform_handles->at(1)));
EXPECT_TRUE(h2.is_valid());
platform_handles->clear();
@@ -798,12 +801,11 @@
{
const char kHello[] = "hello";
- embedder::ScopedPlatformHandleVectorPtr platform_handles(
- new embedder::PlatformHandleVector());
+ auto platform_handles = MakeUnique<std::vector<ScopedPlatformHandle>>();
platform_handles->push_back(
- mojo::test::PlatformHandleFromFILE(std::move(fp1)).release());
+ mojo::test::PlatformHandleFromFILE(std::move(fp1)));
platform_handles->push_back(
- mojo::test::PlatformHandleFromFILE(std::move(fp2)).release());
+ mojo::test::PlatformHandleFromFILE(std::move(fp2)));
std::unique_ptr<MessageInTransit> message(
new MessageInTransit(MessageInTransit::Type::ENDPOINT_CLIENT,
diff --git a/mojo/edk/system/remote_consumer_data_pipe_impl.cc b/mojo/edk/system/remote_consumer_data_pipe_impl.cc
index b54b0fa..a3bd83d 100644
--- a/mojo/edk/system/remote_consumer_data_pipe_impl.cc
+++ b/mojo/edk/system/remote_consumer_data_pipe_impl.cc
@@ -18,6 +18,7 @@
#include "mojo/edk/system/message_in_transit.h"
#include "mojo/edk/system/remote_data_pipe_ack.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::RefPtr;
namespace mojo {
@@ -278,7 +279,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
SerializedDataPipeProducerDispatcher* s =
static_cast<SerializedDataPipeProducerDispatcher*>(destination);
s->validated_options = validated_options();
@@ -365,7 +366,7 @@
Channel* /*channel*/,
void* /*destination*/,
size_t* /*actual_size*/,
- embedder::PlatformHandleVector* /*platform_handles*/) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
NOTREACHED();
return false;
}
diff --git a/mojo/edk/system/remote_consumer_data_pipe_impl.h b/mojo/edk/system/remote_consumer_data_pipe_impl.h
index 20a3f04..4c8e8e8 100644
--- a/mojo/edk/system/remote_consumer_data_pipe_impl.h
+++ b/mojo/edk/system/remote_consumer_data_pipe_impl.h
@@ -62,7 +62,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
void ConsumerClose() override;
MojoResult ConsumerReadData(UserPointer<void> elements,
UserPointer<uint32_t> num_bytes,
@@ -85,7 +85,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
bool OnReadMessage(unsigned port, MessageInTransit* message) override;
void OnDetachFromChannel(unsigned port) override;
diff --git a/mojo/edk/system/remote_producer_data_pipe_impl.cc b/mojo/edk/system/remote_producer_data_pipe_impl.cc
index 772277b..c473499 100644
--- a/mojo/edk/system/remote_producer_data_pipe_impl.cc
+++ b/mojo/edk/system/remote_producer_data_pipe_impl.cc
@@ -20,6 +20,7 @@
#include "mojo/edk/system/remote_consumer_data_pipe_impl.h"
#include "mojo/edk/system/remote_data_pipe_ack.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::RefPtr;
namespace mojo {
@@ -162,7 +163,7 @@
Channel* /*channel*/,
void* /*destination*/,
size_t* /*actual_size*/,
- embedder::PlatformHandleVector* /*platform_handles*/) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
NOTREACHED();
return false;
}
@@ -305,7 +306,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* /*platform_handles*/) {
SerializedDataPipeConsumerDispatcher* s =
static_cast<SerializedDataPipeConsumerDispatcher*>(destination);
s->validated_options = validated_options();
diff --git a/mojo/edk/system/remote_producer_data_pipe_impl.h b/mojo/edk/system/remote_producer_data_pipe_impl.h
index 1210b73..0073814 100644
--- a/mojo/edk/system/remote_producer_data_pipe_impl.h
+++ b/mojo/edk/system/remote_producer_data_pipe_impl.h
@@ -63,7 +63,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
void ConsumerClose() override;
MojoResult ConsumerReadData(UserPointer<void> elements,
UserPointer<uint32_t> num_bytes,
@@ -86,7 +86,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override;
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override;
bool OnReadMessage(unsigned port, MessageInTransit* message) override;
void OnDetachFromChannel(unsigned port) override;
diff --git a/mojo/edk/system/shared_buffer_dispatcher.cc b/mojo/edk/system/shared_buffer_dispatcher.cc
index 8b86d0a..128708e 100644
--- a/mojo/edk/system/shared_buffer_dispatcher.cc
+++ b/mojo/edk/system/shared_buffer_dispatcher.cc
@@ -15,6 +15,7 @@
#include "mojo/edk/system/options_validation.h"
#include "mojo/public/c/system/macros.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::util::RefPtr;
namespace mojo {
@@ -98,7 +99,7 @@
Channel* channel,
const void* source,
size_t size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
DCHECK(channel);
if (size != sizeof(SerializedSharedBufferDispatcher)) {
@@ -140,7 +141,7 @@
}
// Starts off invalid, which is what we want.
- embedder::PlatformHandle platform_handle;
+ ScopedPlatformHandle platform_handle;
// We take ownership of the handle, so we have to invalidate the one in
// |platform_handles|.
std::swap(platform_handle, (*platform_handles)[platform_handle_index]);
@@ -149,7 +150,7 @@
// closed even if creation fails.
auto shared_buffer =
channel->platform_support()->CreateSharedBufferFromHandle(
- num_bytes, embedder::ScopedPlatformHandle(platform_handle));
+ num_bytes, std::move(platform_handle));
if (!shared_buffer) {
LOG(ERROR)
<< "Invalid serialized shared buffer dispatcher (invalid num_bytes?)";
@@ -267,7 +268,7 @@
Channel* /*channel*/,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) {
+ std::vector<ScopedPlatformHandle>* platform_handles) {
AssertHasOneRef(); // Only one ref => no need to take the lock.
DCHECK(shared_buffer_);
@@ -276,7 +277,7 @@
// If there's only one reference to |shared_buffer_|, then it's ours (and no
// one else can make any more references to it), so we can just take its
// handle.
- embedder::ScopedPlatformHandle platform_handle(
+ ScopedPlatformHandle platform_handle(
shared_buffer_->HasOneRef() ? shared_buffer_->PassPlatformHandle()
: shared_buffer_->DuplicatePlatformHandle());
if (!platform_handle.is_valid()) {
@@ -286,7 +287,7 @@
serialization->num_bytes = shared_buffer_->GetNumBytes();
serialization->platform_handle_index = platform_handles->size();
- platform_handles->push_back(platform_handle.release());
+ platform_handles->push_back(std::move(platform_handle));
*actual_size = sizeof(SerializedSharedBufferDispatcher);
shared_buffer_ = nullptr;
diff --git a/mojo/edk/system/shared_buffer_dispatcher.h b/mojo/edk/system/shared_buffer_dispatcher.h
index 9f153cf..bcb8279 100644
--- a/mojo/edk/system/shared_buffer_dispatcher.h
+++ b/mojo/edk/system/shared_buffer_dispatcher.h
@@ -59,7 +59,7 @@
Channel* channel,
const void* source,
size_t size,
- embedder::PlatformHandleVector* platform_handles);
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles);
private:
static util::RefPtr<SharedBufferDispatcher> CreateInternal(
@@ -100,7 +100,7 @@
Channel* channel,
void* destination,
size_t* actual_size,
- embedder::PlatformHandleVector* platform_handles) override
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles) override
MOJO_NOT_THREAD_SAFE;
util::RefPtr<embedder::PlatformSharedBuffer> shared_buffer_
diff --git a/mojo/edk/system/slave_connection_manager.cc b/mojo/edk/system/slave_connection_manager.cc
index 0018a60..c0504e7 100644
--- a/mojo/edk/system/slave_connection_manager.cc
+++ b/mojo/edk/system/slave_connection_manager.cc
@@ -15,6 +15,7 @@
#include "mojo/edk/system/message_in_transit.h"
#include "mojo/edk/util/make_unique.h"
+using mojo::embedder::ScopedPlatformHandle;
using mojo::platform::TaskRunner;
using mojo::util::MutexLocker;
using mojo::util::RefPtr;
@@ -49,7 +50,7 @@
void SlaveConnectionManager::Init(
RefPtr<TaskRunner>&& delegate_thread_task_runner,
embedder::SlaveProcessDelegate* slave_process_delegate,
- embedder::ScopedPlatformHandle platform_handle) {
+ ScopedPlatformHandle platform_handle) {
DCHECK(delegate_thread_task_runner);
DCHECK(slave_process_delegate);
DCHECK(platform_handle.is_valid());
@@ -116,7 +117,7 @@
const ConnectionIdentifier& connection_id,
ProcessIdentifier* peer_process_identifier,
bool* is_first,
- embedder::ScopedPlatformHandle* platform_handle) {
+ ScopedPlatformHandle* platform_handle) {
AssertNotOnPrivateThread();
DCHECK(peer_process_identifier);
DCHECK(is_first);
@@ -135,7 +136,7 @@
}
void SlaveConnectionManager::InitOnPrivateThread(
- embedder::ScopedPlatformHandle platform_handle) {
+ ScopedPlatformHandle platform_handle) {
AssertOnPrivateThread();
raw_channel_ = RawChannel::Create(platform_handle.Pass());
@@ -208,7 +209,7 @@
Result* result,
ProcessIdentifier* peer_process_identifier,
bool* is_first,
- embedder::ScopedPlatformHandle* platform_handle) {
+ ScopedPlatformHandle* platform_handle) {
DCHECK(result);
AssertOnPrivateThread();
// This should only posted (from another thread, to |private_thread_|) with
@@ -236,7 +237,7 @@
void SlaveConnectionManager::OnReadMessage(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) {
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles) {
AssertOnPrivateThread();
// Set |*ack_result_| to failure by default.
@@ -292,8 +293,7 @@
CONNECTION_MANAGER_ACK_SUCCESS_CONNECT_NEW_CONNECTION:
CHECK_EQ(num_platform_handles, 1u);
*ack_result_ = Result::SUCCESS_CONNECT_NEW_CONNECTION;
- ack_platform_handle_->reset(platform_handles->at(0));
- platform_handles->at(0) = embedder::PlatformHandle();
+ *ack_platform_handle_ = std::move(platform_handles->at(0));
break;
case MessageInTransit::Subtype::
CONNECTION_MANAGER_ACK_SUCCESS_CONNECT_REUSE_CONNECTION:
diff --git a/mojo/edk/system/slave_connection_manager.h b/mojo/edk/system/slave_connection_manager.h
index 2453f56..951f1e1 100644
--- a/mojo/edk/system/slave_connection_manager.h
+++ b/mojo/edk/system/slave_connection_manager.h
@@ -80,7 +80,8 @@
// |RawChannel::Delegate| methods (only called on |private_thread_|):
void OnReadMessage(
const MessageInTransit::View& message_view,
- embedder::ScopedPlatformHandleVectorPtr platform_handles) override;
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles) override;
void OnError(Error error) override;
// Asserts that the current thread is *not* |private_thread_| (no-op if
diff --git a/mojo/edk/system/transport_data.cc b/mojo/edk/system/transport_data.cc
index 805d24c..1f7d8ea 100644
--- a/mojo/edk/system/transport_data.cc
+++ b/mojo/edk/system/transport_data.cc
@@ -13,6 +13,8 @@
#include "mojo/edk/system/configuration.h"
#include "mojo/edk/system/message_in_transit.h"
+using mojo::embedder::ScopedPlatformHandle;
+
namespace mojo {
namespace system {
@@ -124,7 +126,7 @@
if (estimated_num_platform_handles > 0) {
DCHECK(!platform_handles_);
- platform_handles_.reset(new embedder::PlatformHandleVector());
+ platform_handles_.reset(new std::vector<ScopedPlatformHandle>());
}
Header* header = reinterpret_cast<Header*>(buffer_.get());
@@ -194,7 +196,7 @@
}
TransportData::TransportData(
- embedder::ScopedPlatformHandleVectorPtr platform_handles,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles,
size_t serialized_platform_handle_size)
: buffer_size_(), platform_handles_(std::move(platform_handles)) {
buffer_size_ = MessageInTransit::RoundUpMessageAlignment(
@@ -311,7 +313,7 @@
std::unique_ptr<DispatcherVector> TransportData::DeserializeDispatchers(
const void* buffer,
size_t buffer_size,
- embedder::ScopedPlatformHandleVectorPtr platform_handles,
+ std::unique_ptr<std::vector<ScopedPlatformHandle>> platform_handles,
Channel* channel) {
DCHECK(buffer);
DCHECK_GT(buffer_size, 0u);
diff --git a/mojo/edk/system/transport_data.h b/mojo/edk/system/transport_data.h
index fb4ba6b..60a0821 100644
--- a/mojo/edk/system/transport_data.h
+++ b/mojo/edk/system/transport_data.h
@@ -11,8 +11,7 @@
#include <vector>
#include "base/memory/aligned_memory.h"
-#include "mojo/edk/embedder/platform_handle.h"
-#include "mojo/edk/embedder/platform_handle_vector.h"
+#include "mojo/edk/embedder/scoped_platform_handle.h"
#include "mojo/edk/system/dispatcher.h"
#include "mojo/public/cpp/system/macros.h"
@@ -95,7 +94,8 @@
// |Dispatcher|s. (|Header| will be present, and zero except for
// |num_platform_handles|, and |platform_handle_table_offset| if necessary.)
explicit TransportData(
- embedder::ScopedPlatformHandleVectorPtr platform_handles,
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles,
size_t serialized_platform_handle_size);
~TransportData();
@@ -110,10 +110,10 @@
// Gets attached platform-specific handles; this may return null if there are
// none. Note that the caller may mutate the set of platform-specific handles.
- const embedder::PlatformHandleVector* platform_handles() const {
+ const std::vector<embedder::ScopedPlatformHandle>* platform_handles() const {
return platform_handles_.get();
}
- embedder::PlatformHandleVector* platform_handles() {
+ std::vector<embedder::ScopedPlatformHandle>* platform_handles() {
return platform_handles_.get();
}
@@ -142,7 +142,8 @@
static std::unique_ptr<DispatcherVector> DeserializeDispatchers(
const void* buffer,
size_t buffer_size,
- embedder::ScopedPlatformHandleVectorPtr platform_handles,
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles,
Channel* channel);
private:
@@ -179,7 +180,8 @@
// transport). The vector (if any) owns the handles that it contains (and is
// responsible for closing them).
// TODO(vtl): With C++11, change it to a vector of |ScopedPlatformHandle|s.
- embedder::ScopedPlatformHandleVectorPtr platform_handles_;
+ std::unique_ptr<std::vector<embedder::ScopedPlatformHandle>>
+ platform_handles_;
MOJO_DISALLOW_COPY_AND_ASSIGN(TransportData);
};