From: Lars Ingebrigtsen Date: Thu, 16 Dec 2021 07:00:01 +0000 (+0100) Subject: Make the multisession files value read more resilient X-Git-Tag: emacs-29.0.90~3592^2~2 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ed77d1a8c0f005d4f158b635d39db0d5d79fe1ee;p=emacs.git Make the multisession files value read more resilient * lisp/emacs-lisp/multisession.el (multisession--update-file-value): Make more resilient towards errors. --- diff --git a/lisp/emacs-lisp/multisession.el b/lisp/emacs-lisp/multisession.el index 0216057831a..cc7fc53d03d 100644 --- a/lisp/emacs-lisp/multisession.el +++ b/lisp/emacs-lisp/multisession.el @@ -252,15 +252,22 @@ DOC should be a doc string, and ARGS are keywords as applicable to (url-hexify-string name)) (defun multisession--update-file-value (file object) - (with-temp-buffer - (let* ((time (file-attribute-modification-time - (file-attributes file))) - (coding-system-for-read 'utf-8)) - (insert-file-contents file) - (let ((stored (read (current-buffer)))) - (setf (multisession--cached-value object) stored - (multisession--cached-sequence object) time) - stored)))) + (condition-case nil + (with-temp-buffer + (let* ((time (file-attribute-modification-time + (file-attributes file))) + (coding-system-for-read 'utf-8)) + (insert-file-contents file) + (let ((stored (read (current-buffer)))) + (setf (multisession--cached-value object) stored + (multisession--cached-sequence object) time) + stored))) + ;; If the file is contended (could happen with file locking in + ;; Windws) or unreadable, just return the current value. + (error + (if (eq (multisession--cached-value object) multisession--unbound) + (multisession--initial-value object) + (multisession--cached-value object))))) (defun multisession--object-file-name (object) (expand-file-name