diff options
author | Joerg Mueller <nexyon@gmail.com> | 2012-05-05 03:36:10 +0400 |
---|---|---|
committer | Joerg Mueller <nexyon@gmail.com> | 2012-05-05 03:36:10 +0400 |
commit | 9466af0eabf05bfcb966cac01ee72dca544f7dd1 (patch) | |
tree | e7c12ad1fc1000b39e8097db6ea320260206d5ad /intern/audaspace | |
parent | 0f5e1f2ff0221e20b6e23579a7baae20aa600e72 (diff) |
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.
Diffstat (limited to 'intern/audaspace')
-rw-r--r-- | intern/audaspace/intern/AUD_Reference.h | 12 |
1 files changed, 11 insertions, 1 deletions
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; |