diff --git a/panda/src/pipeline/conditionVarDebug.cxx b/panda/src/pipeline/conditionVarDebug.cxx index c38bdc6d52..8485ad1272 100644 --- a/panda/src/pipeline/conditionVarDebug.cxx +++ b/panda/src/pipeline/conditionVarDebug.cxx @@ -29,7 +29,7 @@ using std::ostringstream; ConditionVarDebug:: ConditionVarDebug(MutexDebug &mutex) : _mutex(mutex), - _impl(*mutex.get_global_lock()) + _impl(mutex._global_lock) { nassertv(!_mutex._allow_recursion); } @@ -60,7 +60,7 @@ ConditionVarDebug:: */ void ConditionVarDebug:: wait() { - _mutex._global_lock->lock(); + _mutex._global_lock.lock(); Thread *current_thread = Thread::get_current_thread(); @@ -69,7 +69,7 @@ wait() { ostr << *current_thread << " attempted to wait on " << *this << " without holding " << _mutex; nassert_raise(ostr.str()); - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); return; } @@ -95,7 +95,7 @@ wait() { << *current_thread << " awake on " << *this << "\n"; } - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); } /** @@ -108,7 +108,7 @@ wait() { */ void ConditionVarDebug:: wait(double timeout) { - _mutex._global_lock->lock(); + _mutex._global_lock.lock(); Thread *current_thread = Thread::get_current_thread(); @@ -117,7 +117,7 @@ wait(double timeout) { ostr << *current_thread << " attempted to wait on " << *this << " without holding " << _mutex; nassert_raise(ostr.str()); - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); return; } @@ -144,7 +144,7 @@ wait(double timeout) { << *current_thread << " awake on " << *this << "\n"; } - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); } /** @@ -158,7 +158,7 @@ wait(double timeout) { */ void ConditionVarDebug:: notify() { - _mutex._global_lock->lock(); + _mutex._global_lock.lock(); /* if (!_mutex.do_debug_is_locked()) { @@ -167,7 +167,7 @@ notify() { ostr << *current_thread << " attempted to notify " << *this << " without holding " << _mutex; nassert_raise(ostr.str()); - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); return; } */ @@ -179,7 +179,7 @@ notify() { } _impl.notify(); - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); } /** @@ -190,7 +190,7 @@ notify() { */ void ConditionVarDebug:: notify_all() { - _mutex._global_lock->lock(); + _mutex._global_lock.lock(); /* if (!_mutex.do_debug_is_locked()) { @@ -199,7 +199,7 @@ notify_all() { ostr << *current_thread << " attempted to notify " << *this << " without holding " << _mutex; nassert_raise(ostr.str()); - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); return; } */ @@ -211,7 +211,7 @@ notify_all() { } _impl.notify_all(); - _mutex._global_lock->unlock(); + _mutex._global_lock.unlock(); } /** diff --git a/panda/src/pipeline/mutexDebug.I b/panda/src/pipeline/mutexDebug.I index ae3ce74967..0995d78db0 100644 --- a/panda/src/pipeline/mutexDebug.I +++ b/panda/src/pipeline/mutexDebug.I @@ -18,9 +18,9 @@ INLINE void MutexDebug:: lock() { TAU_PROFILE("void MutexDebug::acquire()", " ", TAU_USER); - _global_lock->lock(); + _global_lock.lock(); ((MutexDebug *)this)->do_lock(Thread::get_current_thread()); - _global_lock->unlock(); + _global_lock.unlock(); } /** @@ -30,9 +30,9 @@ lock() { INLINE bool MutexDebug:: try_lock() { TAU_PROFILE("void MutexDebug::try_lock()", " ", TAU_USER); - _global_lock->lock(); + _global_lock.lock(); bool acquired = ((MutexDebug *)this)->do_try_lock(Thread::get_current_thread()); - _global_lock->unlock(); + _global_lock.unlock(); return acquired; } @@ -43,9 +43,9 @@ try_lock() { INLINE void MutexDebug:: unlock() { TAU_PROFILE("void MutexDebug::unlock()", " ", TAU_USER); - _global_lock->lock(); + _global_lock.lock(); ((MutexDebug *)this)->do_unlock(); - _global_lock->unlock(); + _global_lock.unlock(); } /** @@ -62,9 +62,9 @@ INLINE void MutexDebug:: acquire(Thread *current_thread) const { TAU_PROFILE("void MutexDebug::acquire(Thread *)", " ", TAU_USER); nassertv(current_thread == Thread::get_current_thread()); - _global_lock->lock(); + _global_lock.lock(); ((MutexDebug *)this)->do_lock(current_thread); - _global_lock->unlock(); + _global_lock.unlock(); } /** @@ -75,9 +75,9 @@ INLINE bool MutexDebug:: try_acquire(Thread *current_thread) const { TAU_PROFILE("void MutexDebug::try_acquire(Thread *)", " ", TAU_USER); nassertr(current_thread == Thread::get_current_thread(), false); - _global_lock->lock(); + _global_lock.lock(); bool acquired = ((MutexDebug *)this)->do_try_lock(current_thread); - _global_lock->unlock(); + _global_lock.unlock(); return acquired; } @@ -114,9 +114,9 @@ elevate_lock() const { INLINE void MutexDebug:: release() const { TAU_PROFILE("void MutexDebug::release()", " ", TAU_USER); - _global_lock->lock(); + _global_lock.lock(); ((MutexDebug *)this)->do_unlock(); - _global_lock->unlock(); + _global_lock.unlock(); } /** @@ -128,22 +128,8 @@ release() const { INLINE bool MutexDebug:: debug_is_locked() const { TAU_PROFILE("bool MutexDebug::debug_is_locked()", " ", TAU_USER); - _global_lock->lock(); + _global_lock.lock(); bool is_locked = do_debug_is_locked(); - _global_lock->unlock(); + _global_lock.unlock(); return is_locked; } - -/** - * Ensures the global MutexImpl pointer has been created, and returns its - * pointer. Since this method is called by the MutexDebug constructor, any - * other (non-static) methods of MutexDebug may simply assume that the pointer - * has already been created. - */ -INLINE MutexTrueImpl *MutexDebug:: -get_global_lock() { - if (_global_lock == nullptr) { - _global_lock = new MutexTrueImpl; - } - return _global_lock; -} diff --git a/panda/src/pipeline/mutexDebug.cxx b/panda/src/pipeline/mutexDebug.cxx index d1e0194e6f..daa6f3a7ed 100644 --- a/panda/src/pipeline/mutexDebug.cxx +++ b/panda/src/pipeline/mutexDebug.cxx @@ -21,7 +21,7 @@ using std::ostream; using std::ostringstream; int MutexDebug::_pstats_count = 0; -MutexTrueImpl *MutexDebug::_global_lock; +MutexTrueImpl MutexDebug::_global_lock; /** * @@ -34,7 +34,7 @@ MutexDebug(const std::string &name, bool allow_recursion, bool lightweight) : _locking_thread(nullptr), _lock_count(0), _deleted_name(nullptr), - _cvar_impl(*get_global_lock()) + _cvar_impl(_global_lock) { #ifndef SIMPLE_THREADS // If we're using real threads, there's no such thing as a lightweight @@ -87,12 +87,12 @@ output(ostream &out) const { */ void MutexDebug:: output_with_holder(ostream &out) const { - _global_lock->lock(); + _global_lock.lock(); output(out); if (_locking_thread != nullptr) { out << " (held by " << *_locking_thread << ")\n"; } - _global_lock->unlock(); + _global_lock.unlock(); } /** @@ -102,9 +102,9 @@ output_with_holder(ostream &out) const { */ void MutexDebug:: increment_pstats() { - _global_lock->lock(); + _global_lock.lock(); ++_pstats_count; - _global_lock->unlock(); + _global_lock.unlock(); } /** @@ -113,9 +113,9 @@ increment_pstats() { */ void MutexDebug:: decrement_pstats() { - _global_lock->lock(); + _global_lock.lock(); --_pstats_count; - _global_lock->unlock(); + _global_lock.unlock(); } /** diff --git a/panda/src/pipeline/mutexDebug.h b/panda/src/pipeline/mutexDebug.h index 298fd9f7ca..775ff12966 100644 --- a/panda/src/pipeline/mutexDebug.h +++ b/panda/src/pipeline/mutexDebug.h @@ -65,8 +65,6 @@ private: void report_deadlock(Thread *current_thread); private: - INLINE static MutexTrueImpl *get_global_lock(); - bool _allow_recursion; bool _lightweight; Thread *_locking_thread; @@ -80,7 +78,7 @@ private: ConditionVarImpl _cvar_impl; static int _pstats_count; - static MutexTrueImpl *_global_lock; + static MutexTrueImpl _global_lock; friend class ConditionVarDebug; };