diff --git a/BasiliskII/src/SDL/SDLMain.m b/BasiliskII/src/SDL/SDLMain.m index 2eaa1c11..1865aa10 100644 --- a/BasiliskII/src/SDL/SDLMain.m +++ b/BasiliskII/src/SDL/SDLMain.m @@ -346,7 +346,13 @@ static void CustomApplicationMain (int argc, char **argv) @end - +// This is used from video_sdl.cpp. +void NSAutoReleasePool_wrap(void (*fn)(void)) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + fn(); + [pool release]; +} #ifdef main # undef main diff --git a/BasiliskII/src/SDL/video_sdl.cpp b/BasiliskII/src/SDL/video_sdl.cpp index d2472fe9..2f051b3e 100644 --- a/BasiliskII/src/SDL/video_sdl.cpp +++ b/BasiliskII/src/SDL/video_sdl.cpp @@ -66,6 +66,11 @@ #define DEBUG 0 #include "debug.h" +#if (defined(__APPLE__) && defined(__MACH__)) +extern "C" { + void NSAutoReleasePool_wrap(void (*fn)(void)); +} +#endif // Supported video modes using std::vector; @@ -2237,7 +2242,12 @@ static inline void do_video_refresh(void) handle_events(); // Update display +#if (defined(__APPLE__) && defined(__MACH__)) + // SDL expects an auto-release pool to be present. + NSAutoReleasePool_wrap(video_refresh); +#else video_refresh(); +#endif #ifdef SHEEPSHAVER // Set new cursor image if it was changed