Index: mojo/message_pump/message_pump_mojo.cc |
diff --git a/mojo/message_pump/message_pump_mojo.cc b/mojo/message_pump/message_pump_mojo.cc |
index 3f60dd7116d9744411263ad6452563e148ee0990..112b37ec3352668e2fe3379b7e3147e847b810eb 100644 |
--- a/mojo/message_pump/message_pump_mojo.cc |
+++ b/mojo/message_pump/message_pump_mojo.cc |
@@ -295,7 +295,7 @@ bool MessagePumpMojo::ProcessReadyHandles() { |
// EDK staying alive. So quit manually to avoid this thread hanging. |
Quit(); |
} else { |
- RemoveInvalidHandle(handle_results[i], handle); |
+ SignalHandleError(handle, handle_results[i]); |
} |
break; |
case MOJO_RESULT_OK: |
@@ -319,23 +319,6 @@ bool MessagePumpMojo::ProcessReadyHandles() { |
return true; |
} |
-void MessagePumpMojo::RemoveInvalidHandle(MojoResult result, Handle handle) { |
- // TODO(sky): deal with control pipe going bad. |
- CHECK(result == MOJO_RESULT_FAILED_PRECONDITION || |
- result == MOJO_RESULT_CANCELLED || |
- result == MOJO_RESULT_DEADLINE_EXCEEDED); |
- // Indicates the control pipe went bad. |
- CHECK_NE(handle.value(), read_handle_.get().value()); |
- |
- auto it = handlers_.find(handle); |
- CHECK(it != handlers_.end()); |
- MessagePumpMojoHandler* handler = it->second.handler; |
- RemoveHandler(handle); |
- WillSignalHandler(); |
- handler->OnHandleError(handle, result); |
- DidSignalHandler(); |
-} |
- |
bool MessagePumpMojo::RemoveExpiredHandles() { |
bool removed = false; |
// Notify and remove any handlers whose time has expired. First, iterate over |
@@ -358,11 +341,7 @@ bool MessagePumpMojo::RemoveExpiredHandles() { |
// Don't need to check deadline again since it can't change if id hasn't |
// changed. |
if (it != handlers_.end() && it->second.id == pair.second) { |
- MessagePumpMojoHandler* handler = it->second.handler; |
- RemoveHandler(pair.first); |
- WillSignalHandler(); |
- handler->OnHandleError(pair.first, MOJO_RESULT_DEADLINE_EXCEEDED); |
- DidSignalHandler(); |
+ SignalHandleError(pair.first, MOJO_RESULT_DEADLINE_EXCEEDED); |
removed = true; |
} |
} |
@@ -398,9 +377,23 @@ MojoDeadline MessagePumpMojo::GetDeadlineForWait( |
} |
void MessagePumpMojo::SignalHandleReady(Handle handle) { |
- DCHECK(handlers_.find(handle) != handlers_.end()); |
+ auto it = handlers_.find(handle); |
+ DCHECK(it != handlers_.end()); |
+ MessagePumpMojoHandler* handler = it->second.handler; |
+ |
+ WillSignalHandler(); |
+ handler->OnHandleReady(handle); |
+ DidSignalHandler(); |
+} |
+ |
+void MessagePumpMojo::SignalHandleError(Handle handle, MojoResult result) { |
+ auto it = handlers_.find(handle); |
+ DCHECK(it != handlers_.end()); |
+ MessagePumpMojoHandler* handler = it->second.handler; |
+ |
+ RemoveHandler(handle); |
WillSignalHandler(); |
- handlers_[handle].handler->OnHandleReady(handle); |
+ handler->OnHandleError(handle, result); |
DidSignalHandler(); |
} |