diff options
author | David Robillard <d@drobilla.net> | 2020-06-13 17:27:27 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-06-13 17:27:27 +0200 |
commit | 2d907d2c020d319b90256014078c6725810cf7c8 (patch) | |
tree | b8c2ce142f031d7b61c17ac5ee57f484ce8e2d18 | |
parent | 2f90b716c29a623b4ec090bb455d2c49b4062f98 (diff) | |
download | pugl-2d907d2c020d319b90256014078c6725810cf7c8.tar.gz pugl-2d907d2c020d319b90256014078c6725810cf7c8.tar.bz2 pugl-2d907d2c020d319b90256014078c6725810cf7c8.zip |
Mac: Only create an AutoreleasePool for programs
Avoids crashes in some plugin scenarios when draining the AutoreleasePool.
This is still probably not ideal, more fine-grained use of auto release
facilities might be more appropriate here.
-rw-r--r-- | pugl/detail/mac.m | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/pugl/detail/mac.m b/pugl/detail/mac.m index 3bf7cdf..e46d989 100644 --- a/pugl/detail/mac.m +++ b/pugl/detail/mac.m @@ -783,14 +783,16 @@ handleCrossing(PuglWrapperView* view, NSEvent* event, const PuglEventType type) @end PuglWorldInternals* -puglInitWorldInternals(PuglWorldType PUGL_UNUSED(type), - PuglWorldFlags PUGL_UNUSED(flags)) +puglInitWorldInternals(PuglWorldType type, PuglWorldFlags PUGL_UNUSED(flags)) { PuglWorldInternals* impl = (PuglWorldInternals*)calloc( 1, sizeof(PuglWorldInternals)); - impl->app = [NSApplication sharedApplication]; - impl->autoreleasePool = [NSAutoreleasePool new]; + impl->app = [NSApplication sharedApplication]; + + if (type == PUGL_PROGRAM) { + impl->autoreleasePool = [NSAutoreleasePool new]; + } return impl; } @@ -798,7 +800,10 @@ puglInitWorldInternals(PuglWorldType PUGL_UNUSED(type), void puglFreeWorldInternals(PuglWorld* world) { - [world->impl->autoreleasePool drain]; + if (world->impl->autoreleasePool) { + [world->impl->autoreleasePool drain]; + } + free(world->impl); } |