Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Side by Side Diff: third_party/tcmalloc/chromium/src/base/simple_mutex.h

Issue 10384117: Add a chromium version abort function for tcmalloc: Abort(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2007, Google Inc. 1 // Copyright (c) 2007, Google Inc.
2 // All rights reserved. 2 // All rights reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // * Redistributions of source code must retain the above copyright 8 // * Redistributions of source code must retain the above copyright
9 // notice, this list of conditions and the following disclaimer. 9 // notice, this list of conditions and the following disclaimer.
10 // * Redistributions in binary form must reproduce the above 10 // * Redistributions in binary form must reproduce the above
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 # include <pthread.h> 131 # include <pthread.h>
132 typedef pthread_rwlock_t MutexType; 132 typedef pthread_rwlock_t MutexType;
133 #elif defined(HAVE_PTHREAD) 133 #elif defined(HAVE_PTHREAD)
134 # include <pthread.h> 134 # include <pthread.h>
135 typedef pthread_mutex_t MutexType; 135 typedef pthread_mutex_t MutexType;
136 #else 136 #else
137 # error Need to implement mutex.h for your architecture, or #define NO_THREADS 137 # error Need to implement mutex.h for your architecture, or #define NO_THREADS
138 #endif 138 #endif
139 139
140 #include <assert.h> 140 #include <assert.h>
141 #include <stdlib.h> // for abort() 141 #include "base/abort.h"
142 142
143 #define MUTEX_NAMESPACE perftools_mutex_namespace 143 #define MUTEX_NAMESPACE perftools_mutex_namespace
144 144
145 namespace MUTEX_NAMESPACE { 145 namespace MUTEX_NAMESPACE {
146 146
147 class Mutex { 147 class Mutex {
148 public: 148 public:
149 // This is used for the single-arg constructor 149 // This is used for the single-arg constructor
150 enum LinkerInitialized { LINKER_INITIALIZED }; 150 enum LinkerInitialized { LINKER_INITIALIZED };
151 151
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 void Mutex::Lock() { if (is_safe_) EnterCriticalSection(&mutex_); } 227 void Mutex::Lock() { if (is_safe_) EnterCriticalSection(&mutex_); }
228 void Mutex::Unlock() { if (is_safe_) LeaveCriticalSection(&mutex_); } 228 void Mutex::Unlock() { if (is_safe_) LeaveCriticalSection(&mutex_); }
229 bool Mutex::TryLock() { return is_safe_ ? 229 bool Mutex::TryLock() { return is_safe_ ?
230 TryEnterCriticalSection(&mutex_) != 0 : true; } 230 TryEnterCriticalSection(&mutex_) != 0 : true; }
231 void Mutex::ReaderLock() { Lock(); } // we don't have read-write locks 231 void Mutex::ReaderLock() { Lock(); } // we don't have read-write locks
232 void Mutex::ReaderUnlock() { Unlock(); } 232 void Mutex::ReaderUnlock() { Unlock(); }
233 233
234 #elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK) 234 #elif defined(HAVE_PTHREAD) && defined(HAVE_RWLOCK)
235 235
236 #define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \ 236 #define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \
237 if (is_safe_ && fncall(&mutex_) != 0) abort(); \ 237 if (is_safe_ && fncall(&mutex_) != 0) tcmalloc::Abort(); \
238 } while (0) 238 } while (0)
239 239
240 Mutex::Mutex() : destroy_(true) { 240 Mutex::Mutex() : destroy_(true) {
241 SetIsSafe(); 241 SetIsSafe();
242 if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) abort(); 242 if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) tcmalloc::Abort();
243 } 243 }
244 Mutex::Mutex(Mutex::LinkerInitialized) : destroy_(false) { 244 Mutex::Mutex(Mutex::LinkerInitialized) : destroy_(false) {
245 SetIsSafe(); 245 SetIsSafe();
246 if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) abort(); 246 if (is_safe_ && pthread_rwlock_init(&mutex_, NULL) != 0) tcmalloc::Abort();
247 } 247 }
248 Mutex::~Mutex() { if (destroy_) SAFE_PTHREAD(pthread_rwlock_destroy); } 248 Mutex::~Mutex() { if (destroy_) SAFE_PTHREAD(pthread_rwlock_destroy); }
249 void Mutex::Lock() { SAFE_PTHREAD(pthread_rwlock_wrlock); } 249 void Mutex::Lock() { SAFE_PTHREAD(pthread_rwlock_wrlock); }
250 void Mutex::Unlock() { SAFE_PTHREAD(pthread_rwlock_unlock); } 250 void Mutex::Unlock() { SAFE_PTHREAD(pthread_rwlock_unlock); }
251 bool Mutex::TryLock() { return is_safe_ ? 251 bool Mutex::TryLock() { return is_safe_ ?
252 pthread_rwlock_trywrlock(&mutex_) == 0 : true; } 252 pthread_rwlock_trywrlock(&mutex_) == 0 : true; }
253 void Mutex::ReaderLock() { SAFE_PTHREAD(pthread_rwlock_rdlock); } 253 void Mutex::ReaderLock() { SAFE_PTHREAD(pthread_rwlock_rdlock); }
254 void Mutex::ReaderUnlock() { SAFE_PTHREAD(pthread_rwlock_unlock); } 254 void Mutex::ReaderUnlock() { SAFE_PTHREAD(pthread_rwlock_unlock); }
255 #undef SAFE_PTHREAD 255 #undef SAFE_PTHREAD
256 256
257 #elif defined(HAVE_PTHREAD) 257 #elif defined(HAVE_PTHREAD)
258 258
259 #define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \ 259 #define SAFE_PTHREAD(fncall) do { /* run fncall if is_safe_ is true */ \
260 if (is_safe_ && fncall(&mutex_) != 0) abort(); \ 260 if (is_safe_ && fncall(&mutex_) != 0) tcmalloc::Abort(); \
261 } while (0) 261 } while (0)
262 262
263 Mutex::Mutex() : destroy_(true) { 263 Mutex::Mutex() : destroy_(true) {
264 SetIsSafe(); 264 SetIsSafe();
265 if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) abort(); 265 if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) tcmalloc::Abort();
266 } 266 }
267 Mutex::Mutex(Mutex::LinkerInitialized) : destroy_(false) { 267 Mutex::Mutex(Mutex::LinkerInitialized) : destroy_(false) {
268 SetIsSafe(); 268 SetIsSafe();
269 if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) abort(); 269 if (is_safe_ && pthread_mutex_init(&mutex_, NULL) != 0) tcmalloc::Abort();
270 } 270 }
271 Mutex::~Mutex() { if (destroy_) SAFE_PTHREAD(pthread_mutex_destroy); } 271 Mutex::~Mutex() { if (destroy_) SAFE_PTHREAD(pthread_mutex_destroy); }
272 void Mutex::Lock() { SAFE_PTHREAD(pthread_mutex_lock); } 272 void Mutex::Lock() { SAFE_PTHREAD(pthread_mutex_lock); }
273 void Mutex::Unlock() { SAFE_PTHREAD(pthread_mutex_unlock); } 273 void Mutex::Unlock() { SAFE_PTHREAD(pthread_mutex_unlock); }
274 bool Mutex::TryLock() { return is_safe_ ? 274 bool Mutex::TryLock() { return is_safe_ ?
275 pthread_mutex_trylock(&mutex_) == 0 : true; } 275 pthread_mutex_trylock(&mutex_) == 0 : true; }
276 void Mutex::ReaderLock() { Lock(); } 276 void Mutex::ReaderLock() { Lock(); }
277 void Mutex::ReaderUnlock() { Unlock(); } 277 void Mutex::ReaderUnlock() { Unlock(); }
278 #undef SAFE_PTHREAD 278 #undef SAFE_PTHREAD
279 279
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 #define ReaderMutexLock(x) COMPILE_ASSERT(0, rmutex_lock_decl_missing_var_name) 322 #define ReaderMutexLock(x) COMPILE_ASSERT(0, rmutex_lock_decl_missing_var_name)
323 #define WriterMutexLock(x) COMPILE_ASSERT(0, wmutex_lock_decl_missing_var_name) 323 #define WriterMutexLock(x) COMPILE_ASSERT(0, wmutex_lock_decl_missing_var_name)
324 324
325 } // namespace MUTEX_NAMESPACE 325 } // namespace MUTEX_NAMESPACE
326 326
327 using namespace MUTEX_NAMESPACE; 327 using namespace MUTEX_NAMESPACE;
328 328
329 #undef MUTEX_NAMESPACE 329 #undef MUTEX_NAMESPACE
330 330
331 #endif /* #define GOOGLE_SIMPLE_MUTEX_H_ */ 331 #endif /* #define GOOGLE_SIMPLE_MUTEX_H_ */
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698