diff options
author | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-23 00:25:29 +0000 |
---|---|---|
committer | agl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-01-23 00:25:29 +0000 |
commit | 0049398c72b3fd711c825d477e0db6943f8f5db6 (patch) | |
tree | f3d923a985aaf1f2148ba0cd7a69925a8ea21e0a /base/thread_collision_warner.cc | |
parent | 1ebed56434c220f82cf220bbb72a136fea962c87 (diff) | |
download | chromium_src-0049398c72b3fd711c825d477e0db6943f8f5db6.zip chromium_src-0049398c72b3fd711c825d477e0db6943f8f5db6.tar.gz chromium_src-0049398c72b3fd711c825d477e0db6943f8f5db6.tar.bz2 |
Use PlatformThreadId, not int when dealing with thread ids.
Windows uses a DWORD (unsigned long) for thread ids and POSIX uses a
pid_t (int on Linux) for the same. In the code, we are currently
stuffing thread ids into an int which is dangerous on Windows (because
DWORDS can exceed an int and wrap) and will break if pid_t is ever !=
int.
This change changes all the places where we currently have an int to
use a new typedef, PlatformThreadId. This change also needs to occur
for process ids, but I'm not doing that in this CL.
Review URL: http://codereview.chromium.org/18677
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@8525 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/thread_collision_warner.cc')
-rw-r--r-- | base/thread_collision_warner.cc | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/base/thread_collision_warner.cc b/base/thread_collision_warner.cc index 1c51a3e..03245e1 100644 --- a/base/thread_collision_warner.cc +++ b/base/thread_collision_warner.cc @@ -13,11 +13,22 @@ void DCheckAsserter::warn() { NOTREACHED() << "Thread Collision"; } +static subtle::Atomic32 CurrentThread() { + const PlatformThreadId current_thread_id = PlatformThread::CurrentId(); + // We need to get the thread id into an atomic data type. This might be a + // truncating conversion, but any loss-of-information just increases the + // chance of a fault negative, not a false positive. + const subtle::Atomic32 atomic_thread_id = + static_cast<subtle::Atomic32>(current_thread_id); + + return atomic_thread_id; +} + void ThreadCollisionWarner::EnterSelf() { // If the active thread is 0 then I'll write the current thread ID // if two or more threads arrive here only one will succeed to // write on valid_thread_id_ the current thread ID. - const int current_thread_id = PlatformThread::CurrentId(); + subtle::Atomic32 current_thread_id = CurrentThread(); int previous_value = subtle::NoBarrier_CompareAndSwap(&valid_thread_id_, 0, @@ -32,7 +43,7 @@ void ThreadCollisionWarner::EnterSelf() { } void ThreadCollisionWarner::Enter() { - const int current_thread_id = PlatformThread::CurrentId(); + subtle::Atomic32 current_thread_id = CurrentThread(); if (subtle::NoBarrier_CompareAndSwap(&valid_thread_id_, 0, |