diff options
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/libjingle/files/talk/base/criticalsection.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/third_party/libjingle/files/talk/base/criticalsection.h b/third_party/libjingle/files/talk/base/criticalsection.h index fbe7382..937c5bb 100644 --- a/third_party/libjingle/files/talk/base/criticalsection.h +++ b/third_party/libjingle/files/talk/base/criticalsection.h @@ -80,23 +80,36 @@ private: #ifdef POSIX class CriticalSection { -public: + public: CriticalSection() { pthread_mutexattr_t mutex_attribute; + pthread_mutexattr_init(&mutex_attribute); pthread_mutexattr_settype(&mutex_attribute, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&mutex_, &mutex_attribute); + pthread_mutexattr_destroy(&mutex_attribute); + TRACK_OWNER(thread_ = 0); } ~CriticalSection() { pthread_mutex_destroy(&mutex_); } void Enter() { pthread_mutex_lock(&mutex_); + TRACK_OWNER(thread_ = pthread_self()); } void Leave() { + TRACK_OWNER(thread_ = 0); pthread_mutex_unlock(&mutex_); } -private: + +#if CS_TRACK_OWNER + bool CurrentThreadIsOwner() const { + return pthread_equal(thread_, pthread_self()); + } +#endif // CS_TRACK_OWNER + + private: pthread_mutex_t mutex_; + TRACK_OWNER(pthread_t thread_); }; #endif // POSIX |