summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2020-01-13 22:11:03 +0100
committerRémi Verschelde <rverschelde@gmail.com>2020-01-13 22:20:18 +0100
commit0aeb5bbf621d846074c0bc437e8a0f54de71d997 (patch)
treef906709b9e3bcf4bbb1ebb3f2662aa71a78dd3bf
parentf38bfccf42ccf16fd84cb8df41a19a2c3a0f4923 (diff)
Object: Avoid error on emit_signal with freed target
As advised by @reduz.
-rw-r--r--core/object.cpp12
1 files changed, 5 insertions, 7 deletions
diff --git a/core/object.cpp b/core/object.cpp
index ba07ba11c5..21666a334c 100644
--- a/core/object.cpp
+++ b/core/object.cpp
@@ -1185,13 +1185,11 @@ Error Object::emit_signal(const StringName &p_name, const Variant **p_args, int
const Connection &c = slot_map.getv(i).conn;
- Object *target;
-#ifdef DEBUG_ENABLED
- target = ObjectDB::get_instance(slot_map.getk(i)._id);
- ERR_CONTINUE(!target);
-#else
- target = c.target;
-#endif
+ Object *target = ObjectDB::get_instance(slot_map.getk(i)._id);
+ if (!target) {
+ // Target might have been deleted during signal callback, this is expected and OK.
+ continue;
+ }
const Variant **args = p_args;
int argc = p_argcount;