aboutsummaryrefslogtreecommitdiffstats
path: root/src/thread.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/thread.c')
-rw-r--r--src/thread.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/thread.c b/src/thread.c
index e3787971a53..1f7ced386d3 100644
--- a/src/thread.c
+++ b/src/thread.c
@@ -595,14 +595,15 @@ thread_select (select_func *func, int max_fds, fd_set *rfds,
595static void 595static void
596mark_one_thread (struct thread_state *thread) 596mark_one_thread (struct thread_state *thread)
597{ 597{
598 struct handler *handler; 598 /* Get the stack top now, in case mark_specpdl changes it. */
599 Lisp_Object tem; 599 void *stack_top = thread->stack_top;
600 600
601 mark_specpdl (thread->m_specpdl, thread->m_specpdl_ptr); 601 mark_specpdl (thread->m_specpdl, thread->m_specpdl_ptr);
602 602
603 mark_stack (thread->m_stack_bottom, thread->stack_top); 603 mark_stack (thread->m_stack_bottom, stack_top);
604 604
605 for (handler = thread->m_handlerlist; handler; handler = handler->next) 605 for (struct handler *handler = thread->m_handlerlist;
606 handler; handler = handler->next)
606 { 607 {
607 mark_object (handler->tag_or_ch); 608 mark_object (handler->tag_or_ch);
608 mark_object (handler->val); 609 mark_object (handler->val);
@@ -610,6 +611,7 @@ mark_one_thread (struct thread_state *thread)
610 611
611 if (thread->m_current_buffer) 612 if (thread->m_current_buffer)
612 { 613 {
614 Lisp_Object tem;
613 XSETBUFFER (tem, thread->m_current_buffer); 615 XSETBUFFER (tem, thread->m_current_buffer);
614 mark_object (tem); 616 mark_object (tem);
615 } 617 }