Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1039)

Unified Diff: mojo/edk/system/core.cc

Issue 1350023003: Add a Mojo EDK for Chrome that uses one OS pipe per message pipe. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: convert remaining MP tests and simplify RawChannel destruction Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: mojo/edk/system/core.cc
diff --git a/third_party/mojo/src/mojo/edk/system/core.cc b/mojo/edk/system/core.cc
similarity index 95%
copy from third_party/mojo/src/mojo/edk/system/core.cc
copy to mojo/edk/system/core.cc
index fbb6cf1fbf9e7c0f204a34f468e6aa3987719dfd..07ef019c436e06c9114f97faafb82dbcab2fabb1 100644
--- a/third_party/mojo/src/mojo/edk/system/core.cc
+++ b/mojo/edk/system/core.cc
@@ -8,6 +8,7 @@
#include "base/logging.h"
#include "base/time/time.h"
+#include "mojo/edk/embedder/platform_channel_pair.h"
#include "mojo/edk/embedder/platform_shared_buffer.h"
#include "mojo/edk/embedder/platform_support.h"
#include "mojo/edk/system/async_waiter.h"
@@ -18,7 +19,6 @@
#include "mojo/edk/system/dispatcher.h"
#include "mojo/edk/system/handle_signals_state.h"
#include "mojo/edk/system/memory.h"
-#include "mojo/edk/system/message_pipe.h"
#include "mojo/edk/system/message_pipe_dispatcher.h"
#include "mojo/edk/system/shared_buffer_dispatcher.h"
#include "mojo/edk/system/waiter.h"
@@ -86,7 +86,7 @@ Core::~Core() {
}
MojoHandle Core::AddDispatcher(const scoped_refptr<Dispatcher>& dispatcher) {
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
return handle_table_.AddDispatcher(dispatcher);
}
@@ -94,7 +94,7 @@ scoped_refptr<Dispatcher> Core::GetDispatcher(MojoHandle handle) {
if (handle == MOJO_HANDLE_INVALID)
return nullptr;
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
return handle_table_.GetDispatcher(handle);
}
@@ -103,7 +103,7 @@ MojoResult Core::GetAndRemoveDispatcher(MojoHandle handle,
if (handle == MOJO_HANDLE_INVALID)
return MOJO_RESULT_INVALID_ARGUMENT;
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
return handle_table_.GetAndRemoveDispatcher(handle, dispatcher);
}
@@ -130,7 +130,7 @@ MojoResult Core::Close(MojoHandle handle) {
scoped_refptr<Dispatcher> dispatcher;
{
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
MojoResult result =
handle_table_.GetAndRemoveDispatcher(handle, &dispatcher);
if (result != MOJO_RESULT_OK)
@@ -138,7 +138,7 @@ MojoResult Core::Close(MojoHandle handle) {
}
// The dispatcher doesn't have a say in being closed, but gets notified of it.
- // Note: This is done outside of |handle_table_mutex_|. As a result, there's a
+ // Note: This is done outside of |handle_table_lock_|. As a result, there's a
// race condition that the dispatcher must handle; see the comment in
// |Dispatcher| in dispatcher.h.
return dispatcher->Close();
@@ -211,7 +211,7 @@ MojoResult Core::CreateMessagePipe(
std::pair<MojoHandle, MojoHandle> handle_pair;
{
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
handle_pair = handle_table_.AddDispatcherPair(dispatcher0, dispatcher1);
}
if (handle_pair.first == MOJO_HANDLE_INVALID) {
@@ -222,9 +222,9 @@ MojoResult Core::CreateMessagePipe(
return MOJO_RESULT_RESOURCE_EXHAUSTED;
}
- scoped_refptr<MessagePipe> message_pipe(MessagePipe::CreateLocalLocal());
- dispatcher0->Init(message_pipe, 0);
- dispatcher1->Init(message_pipe, 1);
+ embedder::PlatformChannelPair channel_pair;
+ dispatcher0->Init(channel_pair.PassServerHandle());
+ dispatcher1->Init(channel_pair.PassClientHandle());
message_pipe_handle0.Put(handle_pair.first);
message_pipe_handle1.Put(handle_pair.second);
@@ -276,7 +276,7 @@ MojoResult Core::WriteMessage(MojoHandle message_pipe_handle,
// and mark the handles as busy. If the call succeeds, we then remove the
// handles from the handle table.
{
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
MojoResult result = handle_table_.MarkBusyAndStartTransport(
message_pipe_handle, handles_reader.GetPointer(), num_handles,
&transports);
@@ -293,7 +293,7 @@ MojoResult Core::WriteMessage(MojoHandle message_pipe_handle,
transports[i].End();
{
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
if (rv == MOJO_RESULT_OK) {
handle_table_.RemoveBusyHandles(handles_reader.GetPointer(), num_handles);
} else {
@@ -335,7 +335,7 @@ MojoResult Core::ReadMessage(MojoHandle message_pipe_handle,
UserPointer<MojoHandle>::Writer handles_writer(handles,
dispatchers.size());
{
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
success = handle_table_.AddDispatcherVector(
dispatchers, handles_writer.GetPointer());
}
@@ -371,13 +371,13 @@ MojoResult Core::CreateDataPipe(
return result;
scoped_refptr<DataPipeProducerDispatcher> producer_dispatcher =
- DataPipeProducerDispatcher::Create();
+ DataPipeProducerDispatcher::Create(validated_options);
scoped_refptr<DataPipeConsumerDispatcher> consumer_dispatcher =
- DataPipeConsumerDispatcher::Create();
+ DataPipeConsumerDispatcher::Create(validated_options);
std::pair<MojoHandle, MojoHandle> handle_pair;
{
- MutexLocker locker(&handle_table_mutex_);
+ base::AutoLock locker(handle_table_lock_);
handle_pair = handle_table_.AddDispatcherPair(producer_dispatcher,
consumer_dispatcher);
}
@@ -390,9 +390,9 @@ MojoResult Core::CreateDataPipe(
}
DCHECK_NE(handle_pair.second, MOJO_HANDLE_INVALID);
- scoped_refptr<DataPipe> data_pipe(DataPipe::CreateLocal(validated_options));
- producer_dispatcher->Init(data_pipe);
- consumer_dispatcher->Init(data_pipe);
+ embedder::PlatformChannelPair channel_pair;
+ producer_dispatcher->Init(channel_pair.PassServerHandle());
+ consumer_dispatcher->Init(channel_pair.PassClientHandle());
data_pipe_producer_handle.Put(handle_pair.first);
data_pipe_consumer_handle.Put(handle_pair.second);
@@ -539,7 +539,7 @@ MojoResult Core::MapBuffer(MojoHandle buffer_handle,
DCHECK(mapping);
void* address = mapping->GetBase();
{
- MutexLocker locker(&mapping_table_mutex_);
+ base::AutoLock locker(mapping_table_lock_);
result = mapping_table_.AddMapping(mapping.Pass());
}
if (result != MOJO_RESULT_OK)
@@ -550,7 +550,7 @@ MojoResult Core::MapBuffer(MojoHandle buffer_handle,
}
MojoResult Core::UnmapBuffer(UserPointer<void> buffer) {
- MutexLocker locker(&mapping_table_mutex_);
+ base::AutoLock locker(mapping_table_lock_);
return mapping_table_.RemoveMapping(buffer.GetPointerValue());
}

Powered by Google App Engine
This is Rietveld 408576698