summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/core_constants.cpp2
-rw-r--r--core/extension/gdextension.cpp6
-rw-r--r--core/extension/gdextension.h3
-rw-r--r--core/extension/gdextension_compat_hashes.cpp4
-rw-r--r--core/extension/gdextension_compat_hashes.h1
-rw-r--r--core/extension/gdextension_manager.cpp6
-rw-r--r--core/extension/gdextension_manager.h1
-rw-r--r--core/register_core_types.cpp1
8 files changed, 23 insertions, 1 deletions
diff --git a/core/core_constants.cpp b/core/core_constants.cpp
index 33b3271495..2f70fdf219 100644
--- a/core/core_constants.cpp
+++ b/core/core_constants.cpp
@@ -794,6 +794,8 @@ void register_global_constants() {
void unregister_global_constants() {
_global_constants.clear();
+ _global_constants_map.clear();
+ _global_enums.clear();
}
int CoreConstants::get_global_constant_count() {
diff --git a/core/extension/gdextension.cpp b/core/extension/gdextension.cpp
index 8fb1aab6dc..26512d0c56 100644
--- a/core/extension/gdextension.cpp
+++ b/core/extension/gdextension.cpp
@@ -664,7 +664,7 @@ void GDExtension::_get_library_path(GDExtensionClassLibraryPtr p_library, GDExte
memnew_placement(r_path, String(self->library_path));
}
-HashMap<StringName, GDExtensionInterfaceFunctionPtr> gdextension_interface_functions;
+HashMap<StringName, GDExtensionInterfaceFunctionPtr> GDExtension::gdextension_interface_functions;
void GDExtension::register_interface_function(StringName p_function_name, GDExtensionInterfaceFunctionPtr p_function_pointer) {
ERR_FAIL_COND_MSG(gdextension_interface_functions.has(p_function_name), "Attempt to register interface function '" + p_function_name + "', which appears to be already registered.");
@@ -836,6 +836,10 @@ void GDExtension::initialize_gdextensions() {
register_interface_function("get_library_path", (GDExtensionInterfaceFunctionPtr)&GDExtension::_get_library_path);
}
+void GDExtension::finalize_gdextensions() {
+ gdextension_interface_functions.clear();
+}
+
Error GDExtensionResourceLoader::load_gdextension_resource(const String &p_path, Ref<GDExtension> &p_extension) {
ERR_FAIL_COND_V_MSG(p_extension.is_valid() && p_extension->is_library_open(), ERR_ALREADY_IN_USE, "Cannot load GDExtension resource into already opened library.");
diff --git a/core/extension/gdextension.h b/core/extension/gdextension.h
index d71b1f9704..bab3bcd198 100644
--- a/core/extension/gdextension.h
+++ b/core/extension/gdextension.h
@@ -106,6 +106,8 @@ class GDExtension : public Resource {
void clear_instance_bindings();
#endif
+ static HashMap<StringName, GDExtensionInterfaceFunctionPtr> gdextension_interface_functions;
+
protected:
static void _bind_methods();
@@ -153,6 +155,7 @@ public:
static void register_interface_function(StringName p_function_name, GDExtensionInterfaceFunctionPtr p_function_pointer);
static GDExtensionInterfaceFunctionPtr get_interface_function(StringName p_function_name);
static void initialize_gdextensions();
+ static void finalize_gdextensions();
GDExtension();
~GDExtension();
diff --git a/core/extension/gdextension_compat_hashes.cpp b/core/extension/gdextension_compat_hashes.cpp
index 9c8d6b3e7f..2dac4a3a5d 100644
--- a/core/extension/gdextension_compat_hashes.cpp
+++ b/core/extension/gdextension_compat_hashes.cpp
@@ -840,4 +840,8 @@ void GDExtensionCompatHashes::initialize() {
// clang-format on
}
+void GDExtensionCompatHashes::finalize() {
+ mappings.clear();
+}
+
#endif // DISABLE_DEPRECATED
diff --git a/core/extension/gdextension_compat_hashes.h b/core/extension/gdextension_compat_hashes.h
index 3a66ef0b97..29393dcb2d 100644
--- a/core/extension/gdextension_compat_hashes.h
+++ b/core/extension/gdextension_compat_hashes.h
@@ -48,6 +48,7 @@ class GDExtensionCompatHashes {
public:
static void initialize();
+ static void finalize();
static bool lookup_current_hash(const StringName &p_class, const StringName &p_method, uint32_t p_legacy_hash, uint32_t *r_current_hash);
static bool get_legacy_hashes(const StringName &p_class, const StringName &p_method, Array &r_hashes);
};
diff --git a/core/extension/gdextension_manager.cpp b/core/extension/gdextension_manager.cpp
index 0dc84f685f..a4d032f22f 100644
--- a/core/extension/gdextension_manager.cpp
+++ b/core/extension/gdextension_manager.cpp
@@ -293,3 +293,9 @@ GDExtensionManager::GDExtensionManager() {
GDExtensionCompatHashes::initialize();
#endif
}
+
+GDExtensionManager::~GDExtensionManager() {
+#ifndef DISABLE_DEPRECATED
+ GDExtensionCompatHashes::finalize();
+#endif
+}
diff --git a/core/extension/gdextension_manager.h b/core/extension/gdextension_manager.h
index 8cd6d5a3e2..9386e356bb 100644
--- a/core/extension/gdextension_manager.h
+++ b/core/extension/gdextension_manager.h
@@ -86,6 +86,7 @@ public:
void reload_extensions();
GDExtensionManager();
+ ~GDExtensionManager();
};
VARIANT_ENUM_CAST(GDExtensionManager::LoadStatus)
diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp
index b4ac533779..4ad9dd43c4 100644
--- a/core/register_core_types.cpp
+++ b/core/register_core_types.cpp
@@ -360,6 +360,7 @@ void unregister_core_extensions() {
if (_is_core_extensions_registered) {
gdextension_manager->deinitialize_extensions(GDExtension::INITIALIZATION_LEVEL_CORE);
}
+ GDExtension::finalize_gdextensions();
}
void unregister_core_types() {