| Index: mojo/services/gles2/command_buffer_impl.cc
|
| diff --git a/mojo/services/gles2/command_buffer_impl.cc b/mojo/services/gles2/command_buffer_impl.cc
|
| index 71df2c5e7a9d9ed14cb0446528f7a7cdd42f6508..3ffa3946582edeb38325d861bc9efd97173c8f03 100644
|
| --- a/mojo/services/gles2/command_buffer_impl.cc
|
| +++ b/mojo/services/gles2/command_buffer_impl.cc
|
| @@ -143,9 +143,24 @@ void CommandBufferImpl::MakeProgress(int32_t last_get_offset) {
|
| void CommandBufferImpl::RegisterTransferBuffer(int32_t id,
|
| const ShmHandle& transfer_buffer,
|
| uint32_t size) {
|
| - bool read_only = false;
|
| - base::SharedMemory shared_memory(transfer_buffer, read_only);
|
| - command_buffer_->RegisterTransferBuffer(id, &shared_memory, size);
|
| + // Duplicate the shared memory for this process.
|
| + base::SharedMemory shared_memory(transfer_buffer, false);
|
| + base::SharedMemoryHandle duped_shared_memory_handle;
|
| + if (!shared_memory.ShareToProcess(base::GetCurrentProcessHandle(),
|
| + &duped_shared_memory_handle)) {
|
| + DVLOG(0) << "Failed to duplicate shared memory handle.";
|
| + return;
|
| + }
|
| + scoped_ptr<base::SharedMemory> duped_shared_memory(
|
| + new base::SharedMemory(duped_shared_memory_handle, false));
|
| +
|
| + // Map the shared memory into this process. This validates the size.
|
| + if (!duped_shared_memory->Map(size)) {
|
| + DVLOG(0) << "Failed to map shared memory.";
|
| + return;
|
| + }
|
| +
|
| + command_buffer_->RegisterTransferBuffer(id, duped_shared_memory.Pass(), size);
|
| }
|
|
|
| void CommandBufferImpl::DestroyTransferBuffer(int32_t id) {
|
|
|