1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-30 19:53:09 +00:00

Fix thread memory management under NS

* src/thread.c (run_thread): Allocate an autorelease pool so that any
autoreleased Objective C objects are correctly released.
This commit is contained in:
Alan Third 2021-06-22 21:46:02 +01:00
parent 7a13ddfda0
commit 604133ee62

View File

@ -28,6 +28,10 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "pdumper.h"
#include "keyboard.h"
#ifdef HAVE_NS
#include "nsterm.h"
#endif
#if defined HAVE_GLIB && ! defined (HAVE_NS)
#include <xgselect.h>
#else
@ -735,6 +739,15 @@ run_thread (void *state)
struct thread_state *self = state;
struct thread_state **iter;
#ifdef HAVE_NS
/* Allocate an autorelease pool in case this thread calls any
Objective C code.
FIXME: In long running threads we may want to drain the pool
regularly instead of just at the end. */
void *pool = ns_alloc_autorelease_pool ();
#endif
self->m_stack_bottom = self->stack_top = &stack_pos.c;
self->thread_id = sys_thread_self ();
@ -777,6 +790,10 @@ run_thread (void *state)
current_thread = NULL;
sys_cond_broadcast (&self->thread_condvar);
#ifdef HAVE_NS
ns_release_autorelease_pool (pool);
#endif
/* Unlink this thread from the list of all threads. Note that we
have to do this very late, after broadcasting our death.
Otherwise the GC may decide to reap the thread_state object,