Index: chrome/browser/metrics/thread_watcher.cc |
=================================================================== |
--- chrome/browser/metrics/thread_watcher.cc (revision 75833) |
+++ chrome/browser/metrics/thread_watcher.cc (working copy) |
@@ -104,18 +104,22 @@ |
// Send a ping message to the watched thread. |
Task* callback_task = method_factory_.NewRunnableMethod( |
&ThreadWatcher::OnPongMessage, ping_sequence_number_); |
- BrowserThread::PostTask( |
- thread_id(), |
- FROM_HERE, |
- NewRunnableFunction( |
- &ThreadWatcher::OnPingMessage, thread_id_, callback_task)); |
- |
- // Post a task to check the responsiveness of watched thread. |
- MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- method_factory_.NewRunnableMethod( |
- &ThreadWatcher::OnCheckResponsiveness, ping_sequence_number_), |
- unresponsive_time_.InMilliseconds()); |
+ if (BrowserThread::PostTask( |
+ thread_id(), |
+ FROM_HERE, |
+ NewRunnableFunction( |
+ &ThreadWatcher::OnPingMessage, thread_id_, callback_task))) { |
+ // Post a task to check the responsiveness of watched thread. |
+ MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ method_factory_.NewRunnableMethod( |
+ &ThreadWatcher::OnCheckResponsiveness, ping_sequence_number_), |
+ unresponsive_time_.InMilliseconds()); |
+ } else { |
+ // Watched thread might have gone away, stop watching it. |
+ delete callback_task; |
+ DeActivateThreadWatching(); |
+ } |
} |
void ThreadWatcher::OnPongMessage(uint64 ping_sequence_number) { |