2
0
Fork 0

Merge pull request #87836 from stuartcarnie/autoreleasepool

macOS: Use autorelease pools
master
Rémi Verschelde 2024-02-02 12:04:50 +07:00
commit 92ff4f7877
No known key found for this signature in database
GPG Key ID: C3336907360768E1
3 changed files with 26 additions and 13 deletions

@ -160,6 +160,7 @@ DisplayServerMacOS::WindowID DisplayServerMacOS::_create_window(WindowMode p_mod
defer:NO]; defer:NO];
ERR_FAIL_NULL_V_MSG(wd.window_object, INVALID_WINDOW_ID, "Can't create a window"); ERR_FAIL_NULL_V_MSG(wd.window_object, INVALID_WINDOW_ID, "Can't create a window");
[wd.window_object setWindowID:window_id_counter]; [wd.window_object setWindowID:window_id_counter];
[wd.window_object setReleasedWhenClosed:NO];
wd.window_view = [[GodotContentView alloc] init]; wd.window_view = [[GodotContentView alloc] init];
ERR_FAIL_NULL_V_MSG(wd.window_view, INVALID_WINDOW_ID, "Can't create a window view"); ERR_FAIL_NULL_V_MSG(wd.window_view, INVALID_WINDOW_ID, "Can't create a window view");

@ -65,7 +65,9 @@ int main(int argc, char **argv) {
// We must override main when testing is enabled. // We must override main when testing is enabled.
TEST_MAIN_OVERRIDE TEST_MAIN_OVERRIDE
@autoreleasepool {
err = Main::setup(argv[0], argc - first_arg, &argv[first_arg]); err = Main::setup(argv[0], argc - first_arg, &argv[first_arg]);
}
if (err == ERR_HELP) { // Returned by --help and --version, so success. if (err == ERR_HELP) { // Returned by --help and --version, so success.
return 0; return 0;
@ -73,11 +75,17 @@ int main(int argc, char **argv) {
return 255; return 255;
} }
if (Main::start()) { bool ok;
@autoreleasepool {
ok = Main::start();
}
if (ok) {
os.run(); // It is actually the OS that decides how to run. os.run(); // It is actually the OS that decides how to run.
} }
@autoreleasepool {
Main::cleanup(); Main::cleanup();
}
return os.get_exit_code(); return os.get_exit_code();
} }

@ -755,10 +755,13 @@ void OS_MacOS::run() {
return; return;
} }
@autoreleasepool {
main_loop->initialize(); main_loop->initialize();
}
bool quit = false; bool quit = false;
while (!quit) { while (!quit) {
@autoreleasepool {
@try { @try {
if (DisplayServer::get_singleton()) { if (DisplayServer::get_singleton()) {
DisplayServer::get_singleton()->process_events(); // Get rid of pending events. DisplayServer::get_singleton()->process_events(); // Get rid of pending events.
@ -772,6 +775,7 @@ void OS_MacOS::run() {
ERR_PRINT("NSException: " + String::utf8([exception reason].UTF8String)); ERR_PRINT("NSException: " + String::utf8([exception reason].UTF8String));
} }
} }
}
main_loop->finalize(); main_loop->finalize();
} }