diff options
author | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-24 01:45:10 +0000 |
---|---|---|
committer | rtenneti@chromium.org <rtenneti@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-24 01:45:10 +0000 |
commit | 89fb232c2fa6dd588bda640c2fed57c8ad64aad7 (patch) | |
tree | a8117e6bc41bddb1154cc59311eb3ce418be8166 | |
parent | dac205a682f70c3b271ce2e36b2fffcbd1309d65 (diff) | |
download | chromium_src-89fb232c2fa6dd588bda640c2fed57c8ad64aad7.zip chromium_src-89fb232c2fa6dd588bda640c2fed57c8ad64aad7.tar.gz chromium_src-89fb232c2fa6dd588bda640c2fed57c8ad64aad7.tar.bz2 |
Fixed the memory leak of callback Task in PostPingMessage.
If PostTask to watched thread fails, we will stop monitoring
that thread.
BUG=73915,73844
TEST=performance testing
Review URL: http://codereview.chromium.org/6575007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@75838 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/metrics/thread_watcher.cc | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/chrome/browser/metrics/thread_watcher.cc b/chrome/browser/metrics/thread_watcher.cc index 15f5b14..cac9afd 100644 --- a/chrome/browser/metrics/thread_watcher.cc +++ b/chrome/browser/metrics/thread_watcher.cc @@ -104,18 +104,22 @@ void ThreadWatcher::PostPingMessage() { // 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) { |