summaryrefslogtreecommitdiff
path: root/src/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread.c')
-rw-r--r--src/thread.c13
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);