aboutsummaryrefslogtreecommitdiffstats
path: root/src/thread.h
diff options
context:
space:
mode:
authorPaul Eggert2017-07-14 04:54:05 -0700
committerPaul Eggert2017-07-14 04:57:18 -0700
commit9dee1c884eb50ba282eb9dd2495c5269add25963 (patch)
tree947b4c3c21e4bef82795cfbd60f29e371b0e2cc3 /src/thread.h
parent6443a95ad74d54b8be5ba85af9b893f3f1d5fa02 (diff)
downloademacs-9dee1c884eb50ba282eb9dd2495c5269add25963.tar.gz
emacs-9dee1c884eb50ba282eb9dd2495c5269add25963.zip
Improve stack-overflow heuristic on GNU/Linux
Problem reported by Steve Kemp (Bug#27585). * src/eval.c (near_C_stack_top): Remove. All uses replaced by current_thread->stack_top. (record_in_backtrace): Set current_thread->stack_top. This is for when the Lisp interpreter calls itself. * src/lread.c (read1): Set current_thread->stack_top. This is for recursive s-expression reads. * src/print.c (print_object): Set current_thread->stack_top. This is for recursive s-expression printing. * src/thread.c (mark_one_thread): Get stack top first. * src/thread.h (struct thread_state.stack_top): Now void *, not char *.
Diffstat (limited to 'src/thread.h')
-rw-r--r--src/thread.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/thread.h b/src/thread.h
index 9e94de5c175..52b16f1ba83 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -62,8 +62,14 @@ struct thread_state
62 char *m_stack_bottom; 62 char *m_stack_bottom;
63#define stack_bottom (current_thread->m_stack_bottom) 63#define stack_bottom (current_thread->m_stack_bottom)
64 64
65 /* An address near the top of the stack. */ 65 /* The address of an object near the C stack top, used to determine
66 char *stack_top; 66 which words need to be scanned by the garbage collector. This is
67 also used to detect heuristically whether segmentation violation
68 address indicates stack overflow, as opposed to some internal
69 error in Emacs. If the C function F calls G which calls H which
70 calls ... F, then at least one of the functions in the chain
71 should set this to the address of a local variable. */
72 void *stack_top;
67 73
68 struct catchtag *m_catchlist; 74 struct catchtag *m_catchlist;
69#define catchlist (current_thread->m_catchlist) 75#define catchlist (current_thread->m_catchlist)