summaryrefslogtreecommitdiffstats
path: root/base/thread_collision_warner.cc
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-23 00:25:29 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-01-23 00:25:29 +0000
commit0049398c72b3fd711c825d477e0db6943f8f5db6 (patch)
treef3d923a985aaf1f2148ba0cd7a69925a8ea21e0a /base/thread_collision_warner.cc
parent1ebed56434c220f82cf220bbb72a136fea962c87 (diff)
downloadchromium_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.cc15
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,