瀏覽代碼

Fix extensions loading/initializing even when entry point fails

Mikael Hermansson 1 年之前
父節點
當前提交
5c6353ae17
共有 1 個文件被更改,包括 5 次插入0 次删除
  1. 5 0
      core/extension/gdextension.cpp

+ 5 - 0
core/extension/gdextension.cpp

@@ -743,6 +743,7 @@ Error GDExtension::open_library(const String &p_path, const String &p_entry_symb
 		return OK;
 	} else {
 		ERR_PRINT("GDExtension initialization function '" + p_entry_symbol + "' returned an error.");
+		OS::get_singleton()->close_dynamic_library(library);
 		return FAILED;
 	}
 }
@@ -928,6 +929,10 @@ Error GDExtensionResourceLoader::load_gdextension_resource(const String &p_path,
 			DirAccess::remove_absolute(p_extension->get_temp_library_path());
 		}
 #endif
+
+		// Unreference the extension so that this loading can be considered a failure.
+		p_extension.unref();
+
 		// Errors already logged in open_library()
 		return err;
 	}