From: Stefan Monnier Date: Tue, 4 Jun 2019 16:55:53 +0000 (-0400) Subject: * lisp/emacs-lisp/thunk.el (thunk-delay): Fix memory leak X-Git-Tag: emacs-27.0.90~2696 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=f4d32538317c2cc6e8e9041d07d84b1e812e4e19;p=emacs.git * 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). --- 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.