diff options
author | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-10 19:18:53 +0000 |
---|---|---|
committer | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-10 19:18:53 +0000 |
commit | 7d2e5f7627b05eda3ad483b5cd4d656121ade990 (patch) | |
tree | 23cf1f6999b4bc07113a5ac56a4bb474fd5c994d /base/supports_user_data.cc | |
parent | d9263212549965ba7d6fb7d0eb570a361d2c0624 (diff) | |
download | chromium_src-7d2e5f7627b05eda3ad483b5cd4d656121ade990.zip chromium_src-7d2e5f7627b05eda3ad483b5cd4d656121ade990.tar.gz chromium_src-7d2e5f7627b05eda3ad483b5cd4d656121ade990.tar.bz2 |
SupportsUserData is not thread safe
Lets ensure none of its usages are unsafe.
BUG=
Review URL: https://chromiumcodereview.appspot.com/10919137
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155794 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/supports_user_data.cc')
-rw-r--r-- | base/supports_user_data.cc | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/base/supports_user_data.cc b/base/supports_user_data.cc index b2f1228..2a0263e 100644 --- a/base/supports_user_data.cc +++ b/base/supports_user_data.cc @@ -6,9 +6,13 @@ namespace base { -SupportsUserData::SupportsUserData() {} +SupportsUserData::SupportsUserData() { + // Harmless to construct on a different thread to subsequent usage. + thread_checker_.DetachFromThread(); +} SupportsUserData::Data* SupportsUserData::GetUserData(const void* key) const { + DCHECK(thread_checker_.CalledOnValidThread()); DataMap::const_iterator found = user_data_.find(key); if (found != user_data_.end()) return found->second.get(); @@ -16,13 +20,21 @@ SupportsUserData::Data* SupportsUserData::GetUserData(const void* key) const { } void SupportsUserData::SetUserData(const void* key, Data* data) { + DCHECK(thread_checker_.CalledOnValidThread()); user_data_[key] = linked_ptr<Data>(data); } void SupportsUserData::RemoveUserData(const void* key) { + DCHECK(thread_checker_.CalledOnValidThread()); user_data_.erase(key); } -SupportsUserData::~SupportsUserData() {} +void SupportsUserData::DetachUserDataThread() { + thread_checker_.DetachFromThread(); +} + +SupportsUserData::~SupportsUserData() { + DCHECK(thread_checker_.CalledOnValidThread() || user_data_.empty()); +} } // namespace base |