diff options
Diffstat (limited to 'src/thread.c')
| -rw-r--r-- | src/thread.c | 10 |
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, | |||
| 595 | static void | 595 | static void |
| 596 | mark_one_thread (struct thread_state *thread) | 596 | mark_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 | } |