summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2019-02-28 21:16:10 +0200
committerEli Zaretskii <eliz@gnu.org>2019-02-28 21:16:10 +0200
commit5d60229bf1a9a496102fc2a3ef9e57dcce7bef10 (patch)
treed74d82b9bcb1b1bcfa589957ea76e6672e952ef2
parent0a5212b99666b9ba0543a62cdbb12ee0685820f3 (diff)
downloademacs-5d60229bf1a9a496102fc2a3ef9e57dcce7bef10.tar.gz
Avoid rare crashes in xbacktrace
* src/eval.c (backtrace_thread_p, backtrace_top): Don't segfault in "xbacktrace" if called before the specpdl machinery is initialized in pdumped Emacs.
-rw-r--r--src/eval.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c
index bf16a709b15..e162725f03d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -179,7 +179,7 @@ set_backtrace_debug_on_exit (union specbinding *pdl, bool doe)
bool
backtrace_p (union specbinding *pdl)
-{ return pdl >= specpdl; }
+{ return specpdl ? pdl >= specpdl : false; }
static bool
backtrace_thread_p (struct thread_state *tstate, union specbinding *pdl)
@@ -188,6 +188,12 @@ backtrace_thread_p (struct thread_state *tstate, union specbinding *pdl)
union specbinding *
backtrace_top (void)
{
+ /* This is so "xbacktrace" doesn't crash in pdumped Emacs if they
+ invoke the command before init_eval_once_for_pdumper initializes
+ specpdl machinery. See also backtrace_p above. */
+ if (!specpdl)
+ return NULL;
+
union specbinding *pdl = specpdl_ptr - 1;
while (backtrace_p (pdl) && pdl->kind != SPECPDL_BACKTRACE)
pdl--;