| Index: mojo/edk/system/core.cc
|
| diff --git a/mojo/edk/system/core.cc b/mojo/edk/system/core.cc
|
| index 95cb703b4c48e7e71749e7197faddecda5fc0314..039158563d838f88c9bf39c84d138ae9e1259fda 100644
|
| --- a/mojo/edk/system/core.cc
|
| +++ b/mojo/edk/system/core.cc
|
| @@ -39,10 +39,11 @@ namespace system {
|
| // Implementation notes
|
| //
|
| // Mojo primitives are implemented by the singleton |Core| object. Most calls
|
| -// are for a "primary" handle (the first argument). |Core::GetDispatcher()| is
|
| -// used to look up a |Dispatcher| object for a given handle. That object
|
| -// implements most primitives for that object. The wait primitives are not
|
| -// attached to objects and are implemented by |Core| itself.
|
| +// are for a "primary" handle (the first argument). |Core::GetHandle()| is used
|
| +// to look up a |Handle| (in particular, a |Dispatcher| object) for a given
|
| +// handle value. The |Dispatcher| object implements most primitives for that
|
| +// (conceptual/logical) object. The wait primitives are not attached to objects
|
| +// and are implemented by |Core| itself.
|
| //
|
| // Some objects have multiple handles associated to them, e.g., message pipes
|
| // (which have two). In such a case, there is still a |Dispatcher| (e.g.,
|
| @@ -97,22 +98,26 @@ MojoHandle Core::AddHandle(Handle&& handle) {
|
| return handle_table_.AddHandle(std::move(handle));
|
| }
|
|
|
| -MojoResult Core::GetDispatcher(MojoHandle handle,
|
| +MojoResult Core::GetDispatcher(MojoHandle handle_value,
|
| RefPtr<Dispatcher>* dispatcher) {
|
| - if (handle == MOJO_HANDLE_INVALID)
|
| + if (handle_value == MOJO_HANDLE_INVALID)
|
| return MOJO_RESULT_INVALID_ARGUMENT;
|
|
|
| MutexLocker locker(&handle_table_mutex_);
|
| - return handle_table_.GetDispatcher(handle, dispatcher);
|
| + Handle handle;
|
| + MojoResult rv = handle_table_.GetHandle(handle_value, &handle);
|
| + if (rv == MOJO_RESULT_OK)
|
| + *dispatcher = std::move(handle.dispatcher);
|
| + return rv;
|
| }
|
|
|
| -MojoResult Core::GetAndRemoveDispatcher(MojoHandle handle,
|
| +MojoResult Core::GetAndRemoveDispatcher(MojoHandle handle_value,
|
| RefPtr<Dispatcher>* dispatcher) {
|
| - if (handle == MOJO_HANDLE_INVALID)
|
| + if (handle_value == MOJO_HANDLE_INVALID)
|
| return MOJO_RESULT_INVALID_ARGUMENT;
|
|
|
| MutexLocker locker(&handle_table_mutex_);
|
| - return handle_table_.GetAndRemoveDispatcher(handle, dispatcher);
|
| + return handle_table_.GetAndRemoveDispatcher(handle_value, dispatcher);
|
| }
|
|
|
| MojoResult Core::AsyncWait(MojoHandle handle,
|
| @@ -651,13 +656,13 @@ MojoResult Core::WaitManyInternal(const MojoHandle* handles,
|
| return MOJO_RESULT_INVALID_ARGUMENT;
|
| }
|
|
|
| - RefPtr<Dispatcher> dispatcher;
|
| - MojoResult result = handle_table_.GetDispatcher(handles[i], &dispatcher);
|
| + Handle handle;
|
| + MojoResult result = handle_table_.GetHandle(handles[i], &handle);
|
| if (result != MOJO_RESULT_OK) {
|
| *result_index = i;
|
| return result;
|
| }
|
| - dispatchers.push_back(std::move(dispatcher));
|
| + dispatchers.push_back(std::move(handle.dispatcher));
|
| }
|
| }
|
|
|
|
|