Browse Source

gobj: work around a deadlock in GeomCacheManager::flush()

rdb 7 years ago
parent
commit
10fe8659c6
2 changed files with 7 additions and 0 deletions
  1. 5 0
      panda/src/gobj/geomCacheManager.cxx
  2. 2 0
      panda/src/gobj/geomMunger.h

+ 5 - 0
panda/src/gobj/geomCacheManager.cxx

@@ -13,7 +13,9 @@
 
 #include "geomCacheManager.h"
 #include "geomCacheEntry.h"
+#include "geomMunger.h"
 #include "lightMutexHolder.h"
+#include "lightReMutexHolder.h"
 #include "clockObject.h"
 
 GeomCacheManager *GeomCacheManager::_global_ptr = nullptr;
@@ -53,6 +55,9 @@ GeomCacheManager::
  */
 void GeomCacheManager::
 flush() {
+  // Prevent deadlock
+  LightReMutexHolder registry_holder(GeomMunger::get_registry()->_registry_lock);
+
   LightMutexHolder holder(_lock);
   evict_old_entries(0, false);
 }

+ 2 - 0
panda/src/gobj/geomMunger.h

@@ -149,6 +149,8 @@ private:
 
   static PStatCollector _munge_pcollector;
 
+  friend class GeomCacheManager;
+
 public:
   static TypeHandle get_class_type() {
     return _type_handle;