]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix aborts in GC under GC_CHECK_MARKED_OBJECTS
authorEli Zaretskii <eliz@gnu.org>
Wed, 21 Dec 2016 20:16:24 +0000 (22:16 +0200)
committerEli Zaretskii <eliz@gnu.org>
Wed, 21 Dec 2016 20:16:24 +0000 (22:16 +0200)
* src/alloc.c (mark_object) [GC_CHECK_MARKED_OBJECTS]: Don't abort
for thread objects.  They are marked via the all_threads list, and
therefore don't need to be inserted into the red-black tree, so
mem_find will never find them.  Reported by Daniel Colascione
<dancol@dancol.org> in
http://lists.gnu.org/archive/html/emacs-devel/2016-12/msg00817.html.

src/alloc.c

index f2b7682b05dabdf8d8f70c58cba60e2734344b5d..e979f3631ee4d439a8d254fb9778a8ad00f9a433 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))
+       if (m == MEM_NIL && !SUBRP (obj) && !THREADP (obj))
          emacs_abort ();
 #endif /* GC_CHECK_MARKED_OBJECTS */
 
@@ -6416,7 +6416,9 @@ mark_object (Lisp_Object arg)
        else
          pvectype = PVEC_NORMAL_VECTOR;
 
-       if (pvectype != PVEC_SUBR && pvectype != PVEC_BUFFER)
+       if (pvectype != PVEC_SUBR
+           && pvectype != PVEC_BUFFER
+           && pvectype != PVEC_THREAD)
          CHECK_LIVE (live_vector_p);
 
        switch (pvectype)