diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-17 21:41:08 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-17 21:41:08 +0000 |
commit | 0c03b435f8457e8601c80f44a69a56d9f96a274a (patch) | |
tree | e681f3661ec27777c0d8c5d499c36ff1c43d1508 /base/task.h | |
parent | 03addd9009847497437ebe5466c164f50b93e990 (diff) | |
download | chromium_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.h | 7 |
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(); } |