Closed
Description
Edit bromeon -- title was "Cannot add_child
in a &mut self
function if Self
overrides on_notification
"
#[derive(GodotClass)]
#[class(init, base = Node)]
pub struct Bar {
#[base]
base: Base<Node>,
}
#[godot_api]
impl NodeVirtual for Bar {
fn ready(&mut self) {
if Engine::singleton().is_editor_hint() {
return;
}
let foo = Node::new_alloc();
self.add_child(foo.share().upcast());
}
fn on_notification(&mut self, what: NodeNotification) {}
}
add_child
will trigger a notification (https://docs.godotengine.org/en/stable/classes/class_node.html#class-node-constant-notification-child-order-changed), and that will in turn trigger a call to on_notification
, which will try to get a mutable borrow of self
. This causes a crash.
It seems like this is a big issue tbh because it basically makes self.add_child
almost unusable whenever on_notification
is overridden.
I'm not sure what a good solution to this is, but it's related to the common issue of calling a signal that will trigger on self.