Index: mojo/public/cpp/bindings/lib/sync_handle_registry.cc |
diff --git a/mojo/public/cpp/bindings/lib/sync_handle_registry.cc b/mojo/public/cpp/bindings/lib/sync_handle_registry.cc |
index 5ae763bbb24fe95ac796b840e78fe9ae4ae0d230..7619bfae13b03c814f196c36d329c941494a7740 100644 |
--- a/mojo/public/cpp/bindings/lib/sync_handle_registry.cc |
+++ b/mojo/public/cpp/bindings/lib/sync_handle_registry.cc |
@@ -37,8 +37,7 @@ bool SyncHandleRegistry::RegisterHandle(const Handle& handle, |
if (base::ContainsKey(handles_, handle)) |
return false; |
- MojoResult result = MojoAddHandle(wait_set_handle_.get().value(), |
- handle.value(), handle_signals); |
+ MojoResult result = wait_set_.AddHandle(handle, handle_signals); |
if (result != MOJO_RESULT_OK) |
return false; |
@@ -51,8 +50,7 @@ void SyncHandleRegistry::UnregisterHandle(const Handle& handle) { |
if (!base::ContainsKey(handles_, handle)) |
return; |
- MojoResult result = |
- MojoRemoveHandle(wait_set_handle_.get().value(), handle.value()); |
+ MojoResult result = wait_set_.RemoveHandle(handle); |
DCHECK_EQ(MOJO_RESULT_OK, result); |
handles_.erase(handle); |
} |
@@ -61,9 +59,8 @@ bool SyncHandleRegistry::WatchAllHandles(const bool* should_stop[], |
size_t count) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- MojoResult result; |
- uint32_t num_ready_handles; |
- MojoHandle ready_handle; |
+ size_t num_ready_handles; |
+ Handle ready_handle; |
MojoResult ready_handle_result; |
scoped_refptr<SyncHandleRegistry> preserver(this); |
@@ -71,23 +68,14 @@ bool SyncHandleRegistry::WatchAllHandles(const bool* should_stop[], |
for (size_t i = 0; i < count; ++i) |
if (*should_stop[i]) |
return true; |
- do { |
- result = Wait(wait_set_handle_.get(), MOJO_HANDLE_SIGNAL_READABLE, |
- MOJO_DEADLINE_INDEFINITE, nullptr); |
- if (result != MOJO_RESULT_OK) |
- return false; |
- |
- // TODO(yzshen): Theoretically it can reduce sync call re-entrancy if we |
- // give priority to the handle that is waiting for sync response. |
- num_ready_handles = 1; |
- result = MojoGetReadyHandles(wait_set_handle_.get().value(), |
- &num_ready_handles, &ready_handle, |
- &ready_handle_result, nullptr); |
- if (result != MOJO_RESULT_OK && result != MOJO_RESULT_SHOULD_WAIT) |
- return false; |
- } while (result == MOJO_RESULT_SHOULD_WAIT); |
- |
- const auto iter = handles_.find(Handle(ready_handle)); |
+ |
+ // TODO(yzshen): Theoretically it can reduce sync call re-entrancy if we |
+ // give priority to the handle that is waiting for sync response. |
+ num_ready_handles = 1; |
+ wait_set_.Wait(&num_ready_handles, &ready_handle, &ready_handle_result); |
+ DCHECK_EQ(1u, num_ready_handles); |
+ |
+ const auto iter = handles_.find(ready_handle); |
iter->second.Run(ready_handle_result); |
}; |
@@ -95,12 +83,6 @@ bool SyncHandleRegistry::WatchAllHandles(const bool* should_stop[], |
} |
SyncHandleRegistry::SyncHandleRegistry() { |
- MojoHandle handle; |
- MojoResult result = MojoCreateWaitSet(&handle); |
- CHECK_EQ(MOJO_RESULT_OK, result); |
- wait_set_handle_.reset(Handle(handle)); |
- CHECK(wait_set_handle_.is_valid()); |
- |
DCHECK(!g_current_sync_handle_watcher.Pointer()->Get()); |
g_current_sync_handle_watcher.Pointer()->Set(this); |
} |