Skip to content

Commit

Permalink
Merge pull request #69252 from godotengine/revert-67831-scene-tree-fi…
Browse files Browse the repository at this point in the history
…x-storing-removed-nodes

Revert "`SceneTree` Fix storing removed nodes to be skipped by the group calls"
  • Loading branch information
akien-mga authored Nov 27, 2022
2 parents 690199b + 88e6e1e commit 860884b
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 13 deletions.
21 changes: 9 additions & 12 deletions scene/main/scene_tree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,6 @@ void SceneTree::tree_changed() {

void SceneTree::node_added(Node *p_node) {
emit_signal(node_added_name, p_node);
if (call_lock > 0) {
call_skip.erase(p_node->get_instance_id());
}
}

void SceneTree::node_removed(Node *p_node) {
Expand All @@ -134,7 +131,7 @@ void SceneTree::node_removed(Node *p_node) {
}
emit_signal(node_removed_name, p_node);
if (call_lock > 0) {
call_skip.insert(p_node->get_instance_id());
call_skip.insert(p_node);
}
}

Expand Down Expand Up @@ -264,7 +261,7 @@ void SceneTree::call_group_flagsp(uint32_t p_call_flags, const StringName &p_gro

if (p_call_flags & GROUP_CALL_REVERSE) {
for (int i = gr_node_count - 1; i >= 0; i--) {
if (call_lock && call_skip.has(gr_nodes[i]->get_instance_id())) {
if (call_lock && call_skip.has(gr_nodes[i])) {
continue;
}

Expand All @@ -278,7 +275,7 @@ void SceneTree::call_group_flagsp(uint32_t p_call_flags, const StringName &p_gro

} else {
for (int i = 0; i < gr_node_count; i++) {
if (call_lock && call_skip.has(gr_nodes[i]->get_instance_id())) {
if (call_lock && call_skip.has(gr_nodes[i])) {
continue;
}

Expand Down Expand Up @@ -317,7 +314,7 @@ void SceneTree::notify_group_flags(uint32_t p_call_flags, const StringName &p_gr

if (p_call_flags & GROUP_CALL_REVERSE) {
for (int i = gr_node_count - 1; i >= 0; i--) {
if (call_lock && call_skip.has(gr_nodes[i]->get_instance_id())) {
if (call_lock && call_skip.has(gr_nodes[i])) {
continue;
}

Expand All @@ -330,7 +327,7 @@ void SceneTree::notify_group_flags(uint32_t p_call_flags, const StringName &p_gr

} else {
for (int i = 0; i < gr_node_count; i++) {
if (call_lock && call_skip.has(gr_nodes[i]->get_instance_id())) {
if (call_lock && call_skip.has(gr_nodes[i])) {
continue;
}

Expand Down Expand Up @@ -368,7 +365,7 @@ void SceneTree::set_group_flags(uint32_t p_call_flags, const StringName &p_group

if (p_call_flags & GROUP_CALL_REVERSE) {
for (int i = gr_node_count - 1; i >= 0; i--) {
if (call_lock && call_skip.has(gr_nodes[i]->get_instance_id())) {
if (call_lock && call_skip.has(gr_nodes[i])) {
continue;
}

Expand All @@ -381,7 +378,7 @@ void SceneTree::set_group_flags(uint32_t p_call_flags, const StringName &p_group

} else {
for (int i = 0; i < gr_node_count; i++) {
if (call_lock && call_skip.has(gr_nodes[i]->get_instance_id())) {
if (call_lock && call_skip.has(gr_nodes[i])) {
continue;
}

Expand Down Expand Up @@ -857,7 +854,7 @@ void SceneTree::_notify_group_pause(const StringName &p_group, int p_notificatio

for (int i = 0; i < gr_node_count; i++) {
Node *n = gr_nodes[i];
if (call_lock && call_skip.has(n->get_instance_id())) {
if (call_lock && call_skip.has(n)) {
continue;
}

Expand Down Expand Up @@ -907,7 +904,7 @@ void SceneTree::_call_input_pause(const StringName &p_group, CallInputType p_cal
}

Node *n = gr_nodes[i];
if (call_lock && call_skip.has(n->get_instance_id())) {
if (call_lock && call_skip.has(n)) {
continue;
}

Expand Down
2 changes: 1 addition & 1 deletion scene/main/scene_tree.h
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class SceneTree : public MainLoop {

// Safety for when a node is deleted while a group is being called.
int call_lock = 0;
HashSet<ObjectID> call_skip; // Skip erased nodes. Store ID instead of pointer to avoid false positives when node is freed and a new node is allocated at the pointed address.
HashSet<Node *> call_skip; // Skip erased nodes.

List<ObjectID> delete_queue;

Expand Down

0 comments on commit 860884b

Please sign in to comment.