From 9466af0eabf05bfcb966cac01ee72dca544f7dd1 Mon Sep 17 00:00:00 2001 From: Joerg Mueller Date: Fri, 4 May 2012 23:36:10 +0000 Subject: Patch [#31240] Fix audaspace deadlock fix for [#31097] glibc error when playing sound using BGE by Wander Lairson Costa Note: This deadlock fix makes the code non-threadsafe again, a proper solution has to be found still. --- intern/audaspace/intern/AUD_Reference.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/intern/audaspace/intern/AUD_Reference.h b/intern/audaspace/intern/AUD_Reference.h index 0c9f02c0155..5a1aa947148 100644 --- a/intern/audaspace/intern/AUD_Reference.h +++ b/intern/audaspace/intern/AUD_Reference.h @@ -174,8 +174,14 @@ public: std::cerr << "-" << typeid(*m_reference).name() << std::endl; #endif if(AUD_ReferenceHandler::decref(m_original)) + { + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); delete m_reference; - pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); + } + else + { + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); + } } /** @@ -194,7 +200,11 @@ public: std::cerr << "-" << typeid(*m_reference).name() << std::endl; #endif if(AUD_ReferenceHandler::decref(m_original)) + { + pthread_mutex_unlock(AUD_ReferenceHandler::getMutex()); delete m_reference; + pthread_mutex_lock(AUD_ReferenceHandler::getMutex()); + } m_original = ref.m_original; m_reference = ref.m_reference; -- cgit v1.2.3