emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master 5d60229: Avoid rare crashes in xbacktrace


From: Eli Zaretskii
Subject: [Emacs-diffs] master 5d60229: Avoid rare crashes in xbacktrace
Date: Thu, 28 Feb 2019 14:17:27 -0500 (EST)

branch: master
commit 5d60229bf1a9a496102fc2a3ef9e57dcce7bef10
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    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.
---
 src/eval.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/eval.c b/src/eval.c
index bf16a70..e162725 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--;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]