emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master ed77d1a: Make the multisession files value read more resilient


From: Lars Ingebrigtsen
Subject: master ed77d1a: Make the multisession files value read more resilient
Date: Thu, 16 Dec 2021 02:00:14 -0500 (EST)

branch: master
commit ed77d1a8c0f005d4f158b635d39db0d5d79fe1ee
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Make the multisession files value read more resilient
    
    * lisp/emacs-lisp/multisession.el
    (multisession--update-file-value): Make more resilient towards errors.
---
 lisp/emacs-lisp/multisession.el | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/lisp/emacs-lisp/multisession.el b/lisp/emacs-lisp/multisession.el
index 0216057..cc7fc53 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]