瀏覽代碼

Fix cases of resource load tasks not being awaitable

Pedro J. Estébanez 2 年之前
父節點
當前提交
b862fc8c9b
共有 1 個文件被更改,包括 11 次插入0 次删除
  1. 11 0
      core/io/resource_loader.cpp

+ 11 - 0
core/io/resource_loader.cpp

@@ -447,6 +447,17 @@ Ref<Resource> ResourceLoader::load_threaded_get(const String &p_path, Error *r_e
 
 	ThreadLoadTask &load_task = thread_load_tasks[local_path];
 
+	if (!load_task.cond_var && load_task.status == THREAD_LOAD_IN_PROGRESS) {
+		// A condition variable was never created for this task.
+		// That happens when a load has been initiated with subthreads disabled,
+		// but now another load thread needs to interact with this one (either
+		// because of subthreads being used this time, or because it's simply a
+		// threaded load running on a different thread).
+		// Since we want to be notified when the load ends, we must create the
+		// condition variable now.
+		load_task.cond_var = memnew(ConditionVariable);
+	}
+
 	//cond var still exists, meaning it's still loading, request poll
 	if (load_task.cond_var) {
 		{