Chromium Code Reviews| Index: base/message_loop.cc |
| =================================================================== |
| --- base/message_loop.cc (revision 85540) |
| +++ base/message_loop.cc (working copy) |
| @@ -8,6 +8,7 @@ |
| #include "base/bind.h" |
| #include "base/compiler_specific.h" |
| +#include "base/debug/alias.h" |
| #include "base/lazy_instance.h" |
| #include "base/logging.h" |
| #include "base/message_pump_default.h" |
| @@ -467,6 +468,14 @@ |
| // Execute the task and assume the worst: It is probably not reentrant. |
| nestable_tasks_allowed_ = false; |
| + // Before running the task, store the program counter where it was posted |
| + // and deliberately alias it to ensure it is on the stack if the task |
| + // crashes. Be careful not to assume that the variable itself will have the |
| + // expected value when displayed by the optimizer in an optimized build. |
| + // Look at a memory dump of the stack. |
| + const void* program_counter = pending_task.birth_program_counter; |
| + base::debug::Alias(&program_counter); |
|
eroman%chromium.org
2011/05/18 20:52:44
Since you are only targeting MSVC anyway, how abou
apatrick_chromium
2011/05/18 21:09:47
Done.
|
| + |
| HistogramEvent(kTaskRunEvent); |
| FOR_EACH_OBSERVER(TaskObserver, task_observers_, |
| WillProcessTask(pending_task.time_posted)); |
| @@ -766,7 +775,8 @@ |
| time_posted(TimeTicks::Now()), |
| delayed_run_time(delayed_run_time), |
| sequence_num(0), |
| - nestable(nestable) { |
| + nestable(nestable), |
| + birth_program_counter(posted_from.program_counter()) { |
| #if defined(TRACK_ALL_TASK_OBJECTS) |
| if (tracked_objects::ThreadData::IsActive()) { |
| tracked_objects::ThreadData* current_thread_data = |