]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid assertion violation when comparing with main-thread
authorEli Zaretskii <eliz@gnu.org>
Wed, 17 Oct 2018 15:19:47 +0000 (18:19 +0300)
committerEli Zaretskii <eliz@gnu.org>
Wed, 17 Oct 2018 15:19:47 +0000 (18:19 +0300)
* src/thread.c (unmark_main_thread): New function.
* src/lisp.h (unmark_main_thread): Prototype it.
* src/alloc.c (garbage_collect_1): Call it after sweeping.
(Bug#33073)

* test/src/thread-tests.el (threads-test-bug33073): New test.

src/alloc.c
src/lisp.h
src/thread.c
test/src/thread-tests.el

index 3b150797c361c1927443da8b19c0e1c4ff30d2ba..0e48b33882cb02297bdb69e33fab2e5c606fad85 100644 (file)
@@ -5863,6 +5863,8 @@ garbage_collect_1 (void *end)
   VECTOR_UNMARK (&buffer_defaults);
   VECTOR_UNMARK (&buffer_local_symbols);
 
+  unmark_main_thread ();
+
   check_cons_list ();
 
   gc_in_progress = 0;
index a7a26ef350ec84e7a4ca04e61dd763028f950dd0..145901dff5edfd6bebbedd6eb6a30557ff82e2b9 100644 (file)
@@ -4011,6 +4011,7 @@ extern void syms_of_module (void);
 
 /* Defined in thread.c.  */
 extern void mark_threads (void);
+extern void unmark_main_thread (void);
 
 /* Defined in editfns.c.  */
 extern void insert1 (Lisp_Object);
index fc933440fcc9ed3e9902368b105163fb7501cfd9..3674af0e47bcce0a41802863f21945c7793c17bf 100644 (file)
@@ -656,6 +656,12 @@ mark_threads (void)
   flush_stack_call_func (mark_threads_callback, NULL);
 }
 
+void
+unmark_main_thread (void)
+{
+  main_thread.header.size &= ~ARRAY_MARK_FLAG;
+}
+
 \f
 
 static void
index 109e71128abac4150ce543104a7332b6bac05d2b..36bb637790150da141b9e93b74a14dcae43e38e5 100644 (file)
     (should (= (length (all-threads)) 1))
     (should (equal (thread-last-error) '(error "Die, die, die!")))))
 
+(ert-deftest threads-test-bug33073 ()
+  (let ((th (make-thread 'ignore)))
+    (should-not (equal th main-thread))))
+
 ;;; threads.el ends here