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

Unified Diff: mojo/system/core_impl.cc

Issue 103533008: Mojo: More data pipe implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: indentation Created 7 years 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
« no previous file with comments | « mojo/system/core_impl.h ('k') | mojo/system/data_pipe.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/system/core_impl.cc
diff --git a/mojo/system/core_impl.cc b/mojo/system/core_impl.cc
index 60b632519ea7522b4a3014999107ec702fde4b1a..5b26d9f0bb9b20831c69719ad59723eff2fded15 100644
--- a/mojo/system/core_impl.cc
+++ b/mojo/system/core_impl.cc
@@ -8,6 +8,7 @@
#include "base/logging.h"
#include "base/time/time.h"
+#include "mojo/system/data_pipe_producer_dispatcher.h"
#include "mojo/system/dispatcher.h"
#include "mojo/system/limits.h"
#include "mojo/system/memory.h"
@@ -349,11 +350,49 @@ MojoResult CoreImpl::ReadMessage(MojoHandle message_pipe_handle,
return rv;
}
-MojoResult CoreImpl::CreateDataPipe(
- const struct MojoCreateDataPipeOptions* options,
- MojoHandle* producer_handle,
- MojoHandle* consumer_handle) {
- // TODO(vtl)
+MojoResult CoreImpl::CreateDataPipe(const MojoCreateDataPipeOptions* options,
+ MojoHandle* data_pipe_producer_handle,
+ MojoHandle* data_pipe_consumer_handle) {
+ if (options && !VerifyUserPointer<void>(options, sizeof(*options)))
+ return MOJO_RESULT_INVALID_ARGUMENT;
+ if (!VerifyUserPointer<MojoHandle>(data_pipe_producer_handle, 1))
+ return MOJO_RESULT_INVALID_ARGUMENT;
+ if (!VerifyUserPointer<MojoHandle>(data_pipe_consumer_handle, 1))
+ return MOJO_RESULT_INVALID_ARGUMENT;
+
+/* TODO(vtl): The rest of the code will look something like this:
+ scoped_refptr<LocalDataPipe> data_pipe(new LocalDataPipe());
+ MojoResult result = data_pipe->Init(options);
+ if (result != MOJO_RESULT_OK)
+ return result;
+
+ scoped_refptr<DataPipeProducerDispatcher> producer_dispatcher(
+ new DataPipeProducerDispatcher());
+ scoped_refptr<DataPipeConsumerDispatcher> consumer_dispatcher(
+ new DataPipeConsumerDispatcher());
+
+ MojoHandle producer_handle, consumer_handle;
+ {
+ base::AutoLock locker(handle_table_lock_);
+
+ producer_handle = AddDispatcherNoLock(producer_dispatcher);
+ if (producer_handle == MOJO_HANDLE_INVALID)
+ return MOJO_RESULT_RESOURCE_EXHAUSTED;
+
+ consumer_handle = AddDispatcherNoLock(consumer_dispatcher);
+ if (consumer_handle == MOJO_HANDLE_INVALID) {
+ handle_table_.erase(producer_handle);
+ return MOJO_RESULT_RESOURCE_EXHAUSTED;
+ }
+ }
+
+ producer_dispatcher->Init(data_pipe);
+ consumer_dispatcher->Init(data_pipe);
+
+ *data_pipe_producer_handle = producer_handle;
+ *data_pipe_consumer_handle = consumer_handle;
+ return MOJO_RESULT_OK;
+*/
NOTIMPLEMENTED();
return MOJO_RESULT_UNIMPLEMENTED;
}
@@ -431,8 +470,8 @@ CoreImpl::CoreImpl()
}
CoreImpl::~CoreImpl() {
- // This should usually not be reached (the singleton lives forever), except
- // in tests.
+ // This should usually not be reached (the singleton lives forever), except in
+ // tests.
}
scoped_refptr<Dispatcher> CoreImpl::GetDispatcher(MojoHandle handle) {
« no previous file with comments | « mojo/system/core_impl.h ('k') | mojo/system/data_pipe.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698