From 5fcc777ff36c3102ddddd2fb932cb8d0b7cc2741 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 22 Dec 2016 18:13:16 +0200 Subject: [PATCH] Fix last change with thread marking under GC_CHECK_MARKED_OBJECTS * src/thread.c (primary_thread_p): New function. * src/alloc.c (mark_object): Use 'primary_thread_p' to bypass tests meant for thread objects allocated dynamically. * src/thread.h (primary_thread_p): Add prototype. --- src/alloc.c | 4 ++-- src/thread.c | 6 ++++++ src/thread.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/alloc.c b/src/alloc.c index e979f3631ee..93ea286cfb8 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -6406,7 +6406,7 @@ mark_object (Lisp_Object arg) #ifdef GC_CHECK_MARKED_OBJECTS m = mem_find (po); - if (m == MEM_NIL && !SUBRP (obj) && !THREADP (obj)) + if (m == MEM_NIL && !SUBRP (obj) && !primary_thread_p (po)) emacs_abort (); #endif /* GC_CHECK_MARKED_OBJECTS */ @@ -6418,7 +6418,7 @@ mark_object (Lisp_Object arg) if (pvectype != PVEC_SUBR && pvectype != PVEC_BUFFER - && pvectype != PVEC_THREAD) + && !primary_thread_p (po)) CHECK_LIVE (live_vector_p); switch (pvectype) diff --git a/src/thread.c b/src/thread.c index bf2cf1b06c8..6966df31d37 100644 --- a/src/thread.c +++ b/src/thread.c @@ -950,6 +950,12 @@ init_primary_thread (void) primary_thread.event_object = Qnil; } +bool +primary_thread_p (void *ptr) +{ + return (ptr == &primary_thread) ? true : false; +} + void init_threads_once (void) { diff --git a/src/thread.h b/src/thread.h index 7dee67d6595..0090652b358 100644 --- a/src/thread.h +++ b/src/thread.h @@ -236,6 +236,7 @@ extern void maybe_reacquire_global_lock (void); extern void init_threads_once (void); extern void init_threads (void); extern void syms_of_threads (void); +extern bool primary_thread_p (void *); typedef int select_func (int, fd_set *, fd_set *, fd_set *, const struct timespec *, const sigset_t *); -- 2.39.2