]> git.eshelyaron.com Git - emacs.git/commitdiff
Only store offset when executing bytecode
authorZach Shaftel <zshaftel@gmail.com>
Wed, 22 Jul 2020 23:55:15 +0000 (19:55 -0400)
committerZach Shaftel <zshaftel@gmail.com>
Wed, 22 Jul 2020 23:55:15 +0000 (19:55 -0400)
* src/eval.c (record_in_backtrace): Use 'backtrace_top' instead of
'backtrace_next', and check that 'backtrace_byte_offset' > 0 before
calling it, so the specbinding stack isn't scanned just to store an
invalid offset.

src/eval.c

index 73ad3d3bc90b20bf54bc9aef64b54fd4ed0bb23b..b9640f6ab7acdb27388ea5056969fecbbc9ec00e 100644 (file)
@@ -2154,10 +2154,11 @@ record_in_backtrace (Lisp_Object function, Lisp_Object *args, ptrdiff_t nargs)
   specpdl_ptr->bt.function = function;
   current_thread->stack_top = specpdl_ptr->bt.args = args;
   specpdl_ptr->bt.nargs = nargs;
-  union specbinding *nxt = specpdl_ptr;
-  nxt = backtrace_next(nxt);
-  if (nxt->kind == SPECPDL_BACKTRACE)
-    nxt->bt.bytecode_offset = backtrace_byte_offset;
+  if (backtrace_byte_offset > 0) {
+    union specbinding *nxt = backtrace_top ();
+    if (backtrace_p (nxt) && nxt->kind == SPECPDL_BACKTRACE)
+      nxt->bt.bytecode_offset = backtrace_byte_offset;
+  }
   grow_specpdl ();
 
   return count;