Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions core/extension/gdextension_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ GDExtensionManager::LoadStatus GDExtensionManager::_load_extension_internal(cons
gdextension_class_icon_paths[kv.key] = kv.value;
}

return LOAD_STATUS_OK;
}

void GDExtensionManager::_finish_load_extension(const Ref<GDExtension> &p_extension) {
#ifdef TOOLS_ENABLED
// Signals that a new extension is loaded so GDScript can register new class names.
emit_signal("extension_loaded", p_extension);
Expand All @@ -67,8 +71,6 @@ GDExtensionManager::LoadStatus GDExtensionManager::_load_extension_internal(cons
p_extension->startup_callback();
}
}

return LOAD_STATUS_OK;
}

GDExtensionManager::LoadStatus GDExtensionManager::_unload_extension_internal(const Ref<GDExtension> &p_extension) {
Expand Down Expand Up @@ -134,6 +136,8 @@ GDExtensionManager::LoadStatus GDExtensionManager::load_extension_with_loader(co
return status;
}

_finish_load_extension(extension);

extension->set_path(p_path);
gdextension_map[p_path] = extension;
return LOAD_STATUS_OK;
Expand Down Expand Up @@ -186,6 +190,10 @@ GDExtensionManager::LoadStatus GDExtensionManager::reload_extension(const String

extension->finish_reload();

// Needs to come after reload is fully finished, so all objects using
// extension classes are in a consistent state.
_finish_load_extension(extension);

return LOAD_STATUS_OK;
#endif
}
Expand Down
1 change: 1 addition & 0 deletions core/extension/gdextension_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ class GDExtensionManager : public Object {

private:
LoadStatus _load_extension_internal(const Ref<GDExtension> &p_extension, bool p_first_load);
void _finish_load_extension(const Ref<GDExtension> &p_extension);
LoadStatus _unload_extension_internal(const Ref<GDExtension> &p_extension);

#ifdef TOOLS_ENABLED
Expand Down
Loading