]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid aborts due to unaligned byte stack of threads
authorEli Zaretskii <eliz@gnu.org>
Fri, 23 Dec 2016 08:24:30 +0000 (10:24 +0200)
committerEli Zaretskii <eliz@gnu.org>
Fri, 23 Dec 2016 08:24:30 +0000 (10:24 +0200)
* src/thread.c (run_thread): Make sure the pointers to thread byte
stack are properly aligned.  (Bug#25247)

src/thread.c

index 9613d1435f700a83e93547b8dd711178b3c1ee05..3f9595274e971b9e6a8080c7ddb72565616ab399 100644 (file)
@@ -643,12 +643,19 @@ do_nothing (Lisp_Object whatever)
 static void *
 run_thread (void *state)
 {
-  char stack_pos;
+  /* Make sure stack_top and m_stack_bottom are properly aligned as GC
+     expects.  */
+  union
+  {
+    void *p;
+    char c;
+  } stack_pos;
+
   struct thread_state *self = state;
   struct thread_state **iter;
 
-  self->m_stack_bottom = &stack_pos;
-  self->stack_top = &stack_pos;
+  self->m_stack_bottom = &stack_pos.c;
+  self->stack_top = &stack_pos.c;
   self->thread_id = sys_thread_self ();
 
   acquire_global_lock (self);