summaryrefslogtreecommitdiffstats
path: root/mojo/edk/system/raw_channel.cc
diff options
context:
space:
mode:
Diffstat (limited to 'mojo/edk/system/raw_channel.cc')
-rw-r--r--mojo/edk/system/raw_channel.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/mojo/edk/system/raw_channel.cc b/mojo/edk/system/raw_channel.cc
index 63576b7..6f560d6 100644
--- a/mojo/edk/system/raw_channel.cc
+++ b/mojo/edk/system/raw_channel.cc
@@ -303,6 +303,8 @@ void RawChannel::Shutdown() {
ScopedPlatformHandle RawChannel::ReleaseHandle(
std::vector<char>* serialized_read_buffer,
std::vector<char>* serialized_write_buffer,
+ std::vector<int>* serialized_read_fds,
+ std::vector<int>* serialized_write_fds,
bool* write_error) {
ScopedPlatformHandle rv;
*write_error = false;
@@ -311,6 +313,8 @@ ScopedPlatformHandle RawChannel::ReleaseHandle(
base::AutoLock locker(write_lock_);
rv = ReleaseHandleNoLock(serialized_read_buffer,
serialized_write_buffer,
+ serialized_read_fds,
+ serialized_write_fds,
write_error);
delegate_ = nullptr;
internal::g_io_thread_task_runner->PostTask(
@@ -364,9 +368,15 @@ bool RawChannel::SendQueuedMessagesNoLock() {
void RawChannel::SetSerializedData(
char* serialized_read_buffer, size_t serialized_read_buffer_size,
- char* serialized_write_buffer, size_t serialized_write_buffer_size) {
+ char* serialized_write_buffer, size_t serialized_write_buffer_size,
+ std::vector<int>* serialized_read_fds,
+ std::vector<int>* serialized_write_fds) {
base::AutoLock locker(read_lock_);
+#if defined(OS_POSIX)
+ SetSerializedFDs(serialized_read_fds, serialized_write_fds);
+#endif
+
if (serialized_read_buffer_size) {
// TODO(jam): copy power of 2 algorithm below? or share.
read_buffer_->buffer_.resize(serialized_read_buffer_size + kReadSize);
@@ -490,7 +500,8 @@ void RawChannel::SerializeReadBuffer(size_t additional_bytes_read,
void RawChannel::SerializeWriteBuffer(
size_t additional_bytes_written,
size_t additional_platform_handles_written,
- std::vector<char>* buffer) {
+ std::vector<char>* buffer,
+ std::vector<int>* fds) {
write_lock_.AssertAcquired();
if (write_buffer_->IsEmpty()) {
DCHECK_EQ(0u, additional_bytes_written);
@@ -501,7 +512,7 @@ void RawChannel::SerializeWriteBuffer(
UpdateWriteBuffer(
additional_platform_handles_written, additional_bytes_written);
while (!write_buffer_->message_queue_.IsEmpty()) {
- SerializePlatformHandles();
+ SerializePlatformHandles(fds);
std::vector<WriteBuffer::Buffer> buffers;
write_buffer_no_lock()->GetBuffers(&buffers);
for (size_t i = 0; i < buffers.size(); ++i) {