diff options
author | Eli Zaretskii <eliz@gnu.org> | 2016-12-23 10:24:30 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2016-12-23 10:24:30 +0200 |
commit | c4e38581d3b4d6b19921f0db81f319d19ae4fb9e (patch) | |
tree | 24d0879a5ad238d97ba25a374db47860ac05ddd0 /src/thread.c | |
parent | a978d300a3faf58ee6e94ba57f764ca99a9ec308 (diff) | |
download | emacs-c4e38581d3b4d6b19921f0db81f319d19ae4fb9e.tar.gz |
Avoid aborts due to unaligned byte stack of threads
* src/thread.c (run_thread): Make sure the pointers to thread byte
stack are properly aligned. (Bug#25247)
Diffstat (limited to 'src/thread.c')
-rw-r--r-- | src/thread.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/thread.c b/src/thread.c index 9613d1435f7..3f9595274e9 100644 --- a/src/thread.c +++ b/src/thread.c @@ -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); |