]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix last change with thread marking under GC_CHECK_MARKED_OBJECTS
authorEli Zaretskii <eliz@gnu.org>
Thu, 22 Dec 2016 16:13:16 +0000 (18:13 +0200)
committerEli Zaretskii <eliz@gnu.org>
Thu, 22 Dec 2016 16:13:16 +0000 (18:13 +0200)
* 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
src/thread.c
src/thread.h

index e979f3631ee4d439a8d254fb9778a8ad00f9a433..93ea286cfb8554415c134f9b4c587bb88f41a067 100644 (file)
@@ -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)
index bf2cf1b06c8fca388ae7e6693ef62d2107c1c514..6966df31d375502455052a40a0d17b1407a6c906 100644 (file)
@@ -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)
 {
index 7dee67d6595a6fb6cdd14d45ef7278428f16a9ca..0090652b3580f1918e89f0638191207a01e43734 100644 (file)
@@ -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 *);