Make the multisession files value read more resilient

* lisp/emacs-lisp/multisession.el
(multisession--update-file-value): Make more resilient towards errors.
This commit is contained in:
Lars Ingebrigtsen 2021-12-16 08:00:01 +01:00
parent bc60ce7ffd
commit ed77d1a8c0

View file

@ -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