Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(549)

Unified Diff: mojo/message_pump/message_pump_mojo.cc

Issue 1358163006: Adds some code to help isolate where crash is happening (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: moar Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/message_pump/message_pump_mojo.h ('k') | mojo/message_pump/message_pump_mojo_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 a24349be3d721dcc418d50abd2645d959f593fbb..fd783d4b8be6abc4d6ef09e0efe17c87906b9bdf 100644
--- a/mojo/message_pump/message_pump_mojo.cc
+++ b/mojo/message_pump/message_pump_mojo.cc
@@ -38,8 +38,10 @@ MojoDeadline TimeTicksToMojoDeadline(base::TimeTicks time_ticks,
// State needed for one iteration of WaitMany. The first handle and flags
// corresponds to that of the control pipe.
struct MessagePumpMojo::WaitState {
+ // This uses individual vectors for better use with WaitMany().
std::vector<Handle> handles;
std::vector<MojoHandleSignals> wait_signals;
+ std::vector<int> locations;
};
struct MessagePumpMojo::RunState {
@@ -77,7 +79,8 @@ MessagePumpMojo* MessagePumpMojo::current() {
return g_tls_current_pump.Pointer()->Get();
}
-void MessagePumpMojo::AddHandler(MessagePumpMojoHandler* handler,
+void MessagePumpMojo::AddHandler(int location,
+ MessagePumpMojoHandler* handler,
const Handle& handle,
MojoHandleSignals wait_signals,
base::TimeTicks deadline) {
@@ -86,6 +89,7 @@ void MessagePumpMojo::AddHandler(MessagePumpMojoHandler* handler,
// Assume it's an error if someone tries to reregister an existing handle.
CHECK_EQ(0u, handlers_.count(handle));
Handler handler_data;
+ handler_data.location = location;
handler_data.handler = handler;
handler_data.wait_signals = wait_signals;
handler_data.deadline = deadline;
@@ -202,6 +206,12 @@ bool MessagePumpMojo::DoInternalWork(const RunState& run_state, bool block) {
break;
default:
base::debug::Alias(&result);
+ base::debug::Alias(&wait_many_result.index);
+ if (wait_many_result.IsIndexValid()) {
+ const int location = wait_state.locations[wait_many_result.index];
+ base::debug::Alias(&location);
+ }
+
// Unexpected result is likely fatal, crash so we can determine cause.
CHECK(false);
}
@@ -261,11 +271,13 @@ MessagePumpMojo::WaitState MessagePumpMojo::GetWaitState(
WaitState wait_state;
wait_state.handles.push_back(run_state.read_handle.get());
wait_state.wait_signals.push_back(MOJO_HANDLE_SIGNAL_READABLE);
+ wait_state.locations.push_back(6);
for (HandleToHandler::const_iterator i = handlers_.begin();
i != handlers_.end(); ++i) {
wait_state.handles.push_back(i->first);
wait_state.wait_signals.push_back(i->second.wait_signals);
+ wait_state.locations.push_back(i->second.location);
}
return wait_state;
}
« no previous file with comments | « mojo/message_pump/message_pump_mojo.h ('k') | mojo/message_pump/message_pump_mojo_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698