summaryrefslogtreecommitdiffstats
path: root/base/task.h
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-17 21:41:08 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-11-17 21:41:08 +0000
commit0c03b435f8457e8601c80f44a69a56d9f96a274a (patch)
treee681f3661ec27777c0d8c5d499c36ff1c43d1508 /base/task.h
parent03addd9009847497437ebe5466c164f50b93e990 (diff)
downloadchromium_src-0c03b435f8457e8601c80f44a69a56d9f96a274a.zip
chromium_src-0c03b435f8457e8601c80f44a69a56d9f96a274a.tar.gz
chromium_src-0c03b435f8457e8601c80f44a69a56d9f96a274a.tar.bz2
Fix race conditions where an object's constructor uses PostTask on itself. This isn't safe since the posted task can execute before the constructor returns, leading to destruction of the object.
BUG=27944 Review URL: http://codereview.chromium.org/399016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32213 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/task.h')
-rw-r--r--base/task.h7
1 files changed, 7 insertions, 0 deletions
diff --git a/base/task.h b/base/task.h
index e9da8b3..0fb144b 100644
--- a/base/task.h
+++ b/base/task.h
@@ -221,6 +221,13 @@ struct RunnableMethodTraits {
}
void RetainCallee(T* obj) {
+#ifndef NDEBUG
+ // Catch NewRunnableMethod being called in an object's constructor. This
+ // isn't safe since the method can be invoked before the constructor
+ // completes, causing the object to be deleted.
+ obj->AddRef();
+ obj->Release();
+#endif
obj->AddRef();
}