Skip to content

Fix NOTIFICATION_POSTINITIALIZE sent twice to native parent classes#1447

Merged
dsnopek merged 1 commit into
godotengine:masterfrom
dsnopek:avoid-double-postinitialize
May 17, 2024
Merged

Fix NOTIFICATION_POSTINITIALIZE sent twice to native parent classes#1447
dsnopek merged 1 commit into
godotengine:masterfrom
dsnopek:avoid-double-postinitialize

Conversation

@dsnopek

@dsnopek dsnopek commented Apr 24, 2024

Copy link
Copy Markdown
Collaborator

As brought up on PR godotengine/godot#91018, we're currently sending NOTIFICATION_POSTINITIALIZE to the native parent class twice.

This issue was introduced by PR #1269, which was attempting to get the NOTIFICATION_POSTINITIALIZE to arrive to the extension class by sending it in Wrapped::_postinitialize(), but the way it's doing it will send the notification through the native parent class again.

This PR makes it so that Wrapped::_postinitialize() will only send NOTIFICATION_POSTINITIALIZE through the class hierarchy that exists purely on the GDExtension side. Because NOTIFICATION_POSTINITIALIZE is run on the parent class first, this effectively just picks up where the previous notification that went through the native parent class heirarchy stopped.

PR godotengine/godot#91018 and godotengine/godot#91019 attempt to more comprehensively fix NOTIFICATION_POSTINITIALIZE, but those require changing the GDExtension interface (which is Godot 4.4 material at this point), and we need a fix to this issue that can be used with Godot 4.1, 4.2 and 4.3.

@dsnopek dsnopek added bug This has been identified as a bug cherrypick:4.1 cherrypick:4.2 labels Apr 24, 2024
@dsnopek dsnopek added this to the 4.3 milestone Apr 24, 2024
@dsnopek
dsnopek requested a review from a team as a code owner April 24, 2024 18:13
@dsnopek dsnopek modified the milestones: 4.3, 4.x Apr 24, 2024
@dsnopek dsnopek changed the title Fix NOTIFICATION_POSTINITIALIZE sent twice to native parent class Fix NOTIFICATION_POSTINITIALIZE sent twice to native parent classes Apr 24, 2024
@dsnopek
dsnopek force-pushed the avoid-double-postinitialize branch from 030f3e6 to 06373ce Compare April 24, 2024 18:22
@AThousandShips

Copy link
Copy Markdown
Member

We should be able to test for this with a flag and a notification check, just to validate it

@dsnopek

dsnopek commented Apr 24, 2024

Copy link
Copy Markdown
Collaborator Author

We should be able to test for this with a flag and a notification check, just to validate it

There are already automated tests for ensuring that NOTIFICATION_POSTINITIALIZE goes to the extension class - they were added in PR #1269 and they still pass with this PR :-)

I don't think there's a way for us to test that the bug this PR is fixing is fixed, though, since that all happens on the Godot side. So, I don't think this PR needs to add any more tests.

@AThousandShips

AThousandShips commented Apr 24, 2024

Copy link
Copy Markdown
Member

Meant like adding something in the existing check so:

	if (p_what == NOTIFICATION_POSTINITIALIZE) {
		if (post_initialized) {
			// Some error.
		}
		post_initialized = true;
	}

Since the issue was sending it twice yes?

Unless it's only sent to the parent twice

@dsnopek

dsnopek commented Apr 24, 2024

Copy link
Copy Markdown
Collaborator Author

Unless it's only sent to the parent twice

It's only sent to the native parent class twice. On the godot-cpp side, we only see it once.

@Naros

Naros commented Apr 25, 2024

Copy link
Copy Markdown
Contributor

Nice catch @dsnopek !

@vnen vnen left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved in the GDExtension meeting.

@dsnopek
dsnopek merged commit b697ba8 into godotengine:master May 17, 2024
@dsnopek

dsnopek commented May 17, 2024

Copy link
Copy Markdown
Collaborator Author

Cherry-picked for 4.2 in PR #1465

@dsnopek

dsnopek commented May 17, 2024

Copy link
Copy Markdown
Collaborator Author

Cherry-picked for 4.1 in PR #1466

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug This has been identified as a bug

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants