Commit edd0504f authored by amistry's avatar amistry Committed by Commit bot

Small set of cleanups to MessagePumpMojo.

These are:
1. Change RemoveInvalidHandle to SignalHandleError to mirror SignalHandleReady.
2. Use SignalHandleError wherever handler->OnHandleError is called.

Review URL: https://codereview.chromium.org/1573383002

Cr-Commit-Position: refs/heads/master@{#369389}
parent c1eb19e2
......@@ -330,7 +330,7 @@ bool MessagePumpMojo::ProcessReadyHandles() {
// handle.
read_handle_.reset();
} else {
RemoveInvalidHandle(handle_results[i], handle);
SignalHandleError(handle, handle_results[i]);
}
break;
case MOJO_RESULT_OK:
......@@ -354,23 +354,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
......@@ -393,11 +376,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;
}
}
......@@ -434,9 +413,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();
}
......
......@@ -106,10 +106,6 @@ class MOJO_MESSAGE_PUMP_EXPORT MessagePumpMojo : public base::MessagePump {
// if any handles were ready and processed.
bool ProcessReadyHandles();
// Removes the given invalid handle. This is called if MojoGetReadyHandles
// finds an invalid or closed handle.
void RemoveInvalidHandle(MojoResult result, Handle handle);
// Removes any handles that have expired their deadline. Runs the handler's
// OnHandleError() function with |MOJO_RESULT_DEADLINE_EXCEEDED| as the
// result. Returns |true| if any handles were removed.
......@@ -124,6 +120,11 @@ class MOJO_MESSAGE_PUMP_EXPORT MessagePumpMojo : public base::MessagePump {
// must be registered.
void SignalHandleReady(Handle handle);
// Run |OnHandleError()| for the handler registered with |handle| and the
// error code |result|. |handle| must be registered, and will be removed
// before calling |OnHandleError()|.
void SignalHandleError(Handle handle, MojoResult result);
void WillSignalHandler();
void DidSignalHandler();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment