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() { ...@@ -330,7 +330,7 @@ bool MessagePumpMojo::ProcessReadyHandles() {
// handle. // handle.
read_handle_.reset(); read_handle_.reset();
} else { } else {
RemoveInvalidHandle(handle_results[i], handle); SignalHandleError(handle, handle_results[i]);
} }
break; break;
case MOJO_RESULT_OK: case MOJO_RESULT_OK:
...@@ -354,23 +354,6 @@ bool MessagePumpMojo::ProcessReadyHandles() { ...@@ -354,23 +354,6 @@ bool MessagePumpMojo::ProcessReadyHandles() {
return true; 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 MessagePumpMojo::RemoveExpiredHandles() {
bool removed = false; bool removed = false;
// Notify and remove any handlers whose time has expired. First, iterate over // Notify and remove any handlers whose time has expired. First, iterate over
...@@ -393,11 +376,7 @@ bool MessagePumpMojo::RemoveExpiredHandles() { ...@@ -393,11 +376,7 @@ bool MessagePumpMojo::RemoveExpiredHandles() {
// Don't need to check deadline again since it can't change if id hasn't // Don't need to check deadline again since it can't change if id hasn't
// changed. // changed.
if (it != handlers_.end() && it->second.id == pair.second) { if (it != handlers_.end() && it->second.id == pair.second) {
MessagePumpMojoHandler* handler = it->second.handler; SignalHandleError(pair.first, MOJO_RESULT_DEADLINE_EXCEEDED);
RemoveHandler(pair.first);
WillSignalHandler();
handler->OnHandleError(pair.first, MOJO_RESULT_DEADLINE_EXCEEDED);
DidSignalHandler();
removed = true; removed = true;
} }
} }
...@@ -434,9 +413,23 @@ MojoDeadline MessagePumpMojo::GetDeadlineForWait( ...@@ -434,9 +413,23 @@ MojoDeadline MessagePumpMojo::GetDeadlineForWait(
} }
void MessagePumpMojo::SignalHandleReady(Handle handle) { 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(); WillSignalHandler();
handlers_[handle].handler->OnHandleReady(handle); handler->OnHandleError(handle, result);
DidSignalHandler(); DidSignalHandler();
} }
......
...@@ -106,10 +106,6 @@ class MOJO_MESSAGE_PUMP_EXPORT MessagePumpMojo : public base::MessagePump { ...@@ -106,10 +106,6 @@ class MOJO_MESSAGE_PUMP_EXPORT MessagePumpMojo : public base::MessagePump {
// if any handles were ready and processed. // if any handles were ready and processed.
bool ProcessReadyHandles(); 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 // Removes any handles that have expired their deadline. Runs the handler's
// OnHandleError() function with |MOJO_RESULT_DEADLINE_EXCEEDED| as the // OnHandleError() function with |MOJO_RESULT_DEADLINE_EXCEEDED| as the
// result. Returns |true| if any handles were removed. // result. Returns |true| if any handles were removed.
...@@ -124,6 +120,11 @@ class MOJO_MESSAGE_PUMP_EXPORT MessagePumpMojo : public base::MessagePump { ...@@ -124,6 +120,11 @@ class MOJO_MESSAGE_PUMP_EXPORT MessagePumpMojo : public base::MessagePump {
// must be registered. // must be registered.
void SignalHandleReady(Handle handle); 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 WillSignalHandler();
void DidSignalHandler(); 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