From fa7a3025ec1f7ea5407ad0c3a8ef0cc3148cfc34 Mon Sep 17 00:00:00 2001 From: hatoo <hato2000@gmail.com> Date: Mon, 30 Dec 2019 07:16:12 +0900 Subject: [PATCH] [MacOS] Fix memory management (#1342) * macOS, Reduce memory usage * macOS, Fix memory leak --- src/platform_impl/macos/app_state.rs | 10 +++++++++- src/platform_impl/macos/event_loop.rs | 3 ++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/platform_impl/macos/app_state.rs b/src/platform_impl/macos/app_state.rs index 67de6ce6..626b95fc 100644 --- a/src/platform_impl/macos/app_state.rs +++ b/src/platform_impl/macos/app_state.rs @@ -11,7 +11,11 @@ use std::{ time::Instant, }; -use cocoa::{appkit::NSApp, base::nil, foundation::NSString}; +use cocoa::{ + appkit::NSApp, + base::nil, + foundation::{NSAutoreleasePool, NSString}, +}; use crate::{ event::{Event, StartCause}, @@ -277,6 +281,8 @@ impl AppState { unsafe { let _: () = msg_send![NSApp(), stop: nil]; + let pool = NSAutoreleasePool::new(nil); + let windows: *const Object = msg_send![NSApp(), windows]; let window: *const Object = msg_send![windows, objectAtIndex:0]; assert_ne!(window, nil); @@ -292,6 +298,8 @@ impl AppState { let _: () = msg_send![window, setTitle: some_unique_title]; // And restore it. let _: () = msg_send![window, setTitle: title]; + + pool.drain(); }; } HANDLER.update_start_time(); diff --git a/src/platform_impl/macos/event_loop.rs b/src/platform_impl/macos/event_loop.rs index 8469e3ff..57e07b92 100644 --- a/src/platform_impl/macos/event_loop.rs +++ b/src/platform_impl/macos/event_loop.rs @@ -95,12 +95,13 @@ impl<T> EventLoop<T> { F: FnMut(Event<T>, &RootWindowTarget<T>, &mut ControlFlow), { unsafe { - let _pool = NSAutoreleasePool::new(nil); + let pool = NSAutoreleasePool::new(nil); let app = NSApp(); assert_ne!(app, nil); AppState::set_callback(callback, Rc::clone(&self.window_target)); let _: () = msg_send![app, run]; AppState::exit(); + pool.drain(); } }