From f4d32538317c2cc6e8e9041d07d84b1e812e4e19 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Tue, 4 Jun 2019 12:55:53 -0400 Subject: [PATCH] * lisp/emacs-lisp/thunk.el (thunk-delay): Fix memory leak Get rid of references to the free variables of `body` once the thunk has been forced (bug#30626). --- lisp/emacs-lisp/thunk.el | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lisp/emacs-lisp/thunk.el b/lisp/emacs-lisp/thunk.el index e1370c45911..8d28570dc2a 100644 --- a/lisp/emacs-lisp/thunk.el +++ b/lisp/emacs-lisp/thunk.el @@ -54,16 +54,15 @@ "Delay the evaluation of BODY." (declare (debug t)) (cl-assert lexical-binding) - (let ((forced (make-symbol "forced")) - (val (make-symbol "val"))) - `(let (,forced ,val) - (lambda (&optional check) - (if check - ,forced - (unless ,forced - (setf ,val (progn ,@body)) - (setf ,forced t)) - ,val))))) + `(let (forced + (val (lambda () ,@body))) + (lambda (&optional check) + (if check + forced + (unless forced + (setf val (funcall val)) + (setf forced t)) + val)))) (defun thunk-force (delayed) "Force the evaluation of DELAYED. -- 2.39.2