From 40ecf0b18c06fccd0292f8dd6953967ae98a056b Mon Sep 17 00:00:00 2001 From: Douglas Katzman Date: Thu, 18 May 2017 14:38:41 -0400 Subject: [PATCH] Set DEBUG-FUN-DEBUG-BLOCKS atomically --- src/code/debug-int.lisp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/code/debug-int.lisp b/src/code/debug-int.lisp index 732de4f3e..64911b1ef 100644 --- a/src/code/debug-int.lisp +++ b/src/code/debug-int.lisp @@ -1551,17 +1551,12 @@ register." ;;; return the blocks. (defun debug-fun-debug-blocks (debug-fun) (let ((blocks (debug-fun-blocks debug-fun))) - (cond ((eq blocks :unparsed) - (setf (debug-fun-blocks debug-fun) - (parse-debug-blocks debug-fun)) - (unless (debug-fun-blocks debug-fun) - (debug-signal 'no-debug-blocks - :debug-fun debug-fun)) - (debug-fun-blocks debug-fun)) - (blocks) - (t - (debug-signal 'no-debug-blocks - :debug-fun debug-fun))))) + (when (eq blocks :unparsed) + (let* ((new (parse-debug-blocks debug-fun)) + (old (cas (debug-fun-blocks debug-fun) :unparsed new))) + (setq blocks (if (eq old :unparsed) new old)))) + (or blocks + (debug-signal 'no-debug-blocks :debug-fun debug-fun)))) ;;; Return a SIMPLE-VECTOR of DEBUG-BLOCKs or NIL. NIL indicates there ;;; was no basic block information. -- 2.11.4.GIT