浏览代码

Fix crash loading from search path

Possible fix for #395
rdb 7 年之前
父节点
当前提交
5ae38a8a92
共有 3 个文件被更改,包括 8 次插入4 次删除
  1. 6 2
      dtool/src/prc/configVariableSearchPath.I
  2. 1 1
      dtool/src/prc/configVariableSearchPath.h
  3. 1 1
      panda/src/pgraph/loader.cxx

+ 6 - 2
dtool/src/prc/configVariableSearchPath.I

@@ -229,9 +229,13 @@ get_num_directories() const {
 /**
 /**
  * Returns the nth directory on the search list.
  * Returns the nth directory on the search list.
  */
  */
-INLINE const Filename &ConfigVariableSearchPath::
+INLINE Filename ConfigVariableSearchPath::
 get_directory(size_t n) const {
 get_directory(size_t n) const {
-  return get_value().get_directory(n);
+  Filename dir;
+  _lock.lock();
+  dir = _cache.get_directory(n);
+  _lock.unlock();
+  return dir;
 }
 }
 
 
 /**
 /**

+ 1 - 1
dtool/src/prc/configVariableSearchPath.h

@@ -66,7 +66,7 @@ PUBLISHED:
 
 
   INLINE bool is_empty() const;
   INLINE bool is_empty() const;
   INLINE size_t get_num_directories() const;
   INLINE size_t get_num_directories() const;
-  INLINE const Filename &get_directory(size_t n) const;
+  INLINE Filename get_directory(size_t n) const;
   MAKE_SEQ(get_directories, get_num_directories, get_directory);
   MAKE_SEQ(get_directories, get_num_directories, get_directory);
   MAKE_SEQ_PROPERTY(directories, get_num_directories, get_directory);
   MAKE_SEQ_PROPERTY(directories, get_num_directories, get_directory);
 
 

+ 1 - 1
panda/src/pgraph/loader.cxx

@@ -207,7 +207,7 @@ load_file(const Filename &filename, const LoaderOptions &options) const {
 
 
   if (search) {
   if (search) {
     // Look for the file along the model path.
     // Look for the file along the model path.
-    const ConfigVariableSearchPath &model_path = get_model_path();
+    DSearchPath model_path(get_model_path());
     int num_dirs = model_path.get_num_directories();
     int num_dirs = model_path.get_num_directories();
     for (int i = 0; i < num_dirs; ++i) {
     for (int i = 0; i < num_dirs; ++i) {
       Filename pathname(model_path.get_directory(i), this_filename);
       Filename pathname(model_path.get_directory(i), this_filename);