You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-12 13:20:55 +00:00
Merge pull request #102837 from raulsntos/dotnet/fix-reload-callables
[.NET] Skip serializing delegates with a disposed target
This commit is contained in:
@@ -685,8 +685,14 @@ void CSharpLanguage::reload_assemblies(bool p_soft_reload) {
|
|||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
ManagedCallable::instances_pending_reload.insert(managed_callable, serialized_data);
|
ManagedCallable::instances_pending_reload.insert(managed_callable, serialized_data);
|
||||||
} else if (OS::get_singleton()->is_stdout_verbose()) {
|
} else {
|
||||||
OS::get_singleton()->print("Failed to serialize delegate\n");
|
if (OS::get_singleton()->is_stdout_verbose()) {
|
||||||
|
OS::get_singleton()->print("Failed to serialize delegate.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
// We failed to serialize the delegate but we still have to release it;
|
||||||
|
// otherwise, we won't be able to unload the assembly.
|
||||||
|
managed_callable->release_delegate_handle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,6 +166,12 @@ namespace Godot
|
|||||||
}
|
}
|
||||||
case GodotObject godotObject:
|
case GodotObject godotObject:
|
||||||
{
|
{
|
||||||
|
if (!GodotObject.IsInstanceValid(godotObject))
|
||||||
|
{
|
||||||
|
// If the delegate's target has been freed we can't serialize it.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
using (var stream = new MemoryStream())
|
using (var stream = new MemoryStream())
|
||||||
using (var writer = new BinaryWriter(stream))
|
using (var writer = new BinaryWriter(stream))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user