branch: elpa/undo-fu-session
commit 2a543d41685908e8ab52a9bab7d1c9dafbb0b0ab
Author: Campbell Barton <ideasma...@gmail.com>
Commit: Campbell Barton <ideasma...@gmail.com>

    Disable file locking when writing undo-data
    
    This intended to fix #10, since it's possible the lock-file name
    is too long to write. In general locking undo data doesn't achieve
    the outcome intended for file locking (see code-comments) so disable it.
---
 undo-fu-session.el | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/undo-fu-session.el b/undo-fu-session.el
index fbe097ad4d..7a33428efc 100755
--- a/undo-fu-session.el
+++ b/undo-fu-session.el
@@ -453,7 +453,21 @@ Argument PENDING-LIST an `pending-undo-list' compatible 
list."
               (progn
                 (with-temp-buffer
                   (insert-file-contents file-src-full)
-                  (write-region nil nil file-dst-full nil 0))
+                  ;; Don't create lock-files for the following reasons:
+                  ;; - The file name may be too long and fail to lock (see 
#10).
+                  ;; - Locking is already handled by saving the file from 
which this undo-data
+                  ;;   is created so locking the undo-data if of limited use.
+                  ;; - Small but unnecessary overhead.
+                  ;;
+                  ;; Having said this, there is a theoretical possibility two 
emacs instances
+                  ;; could write undo-data at once. Nevertheless, the 
undo-data *must* be in
+                  ;; sync with the file that is written (matching hash & 
length),
+                  ;; so there is practically no benefit in writing a file that 
is "correct" with
+                  ;; respect to locking, when the undo-data doesn't match the 
file contents.
+                  ;; In summary, we would either have to lock both files at 
once, or locking
+                  ;; when writing undo data close to useless.
+                  (let ((create-lockfiles nil))
+                    (write-region nil nil file-dst-full nil 0)))
 
                 (setq size-src (+ size-src (file-attribute-size 
(file-attributes file-src-full))))
                 (setq size-dst (+ size-dst (file-attribute-size 
(file-attributes file-dst-full))))
@@ -652,7 +666,8 @@ Argument PENDING-LIST an `pending-undo-list' compatible 
list."
           (prin1 content-header (current-buffer))
           (write-char ?\n (current-buffer))
           (prin1 content-data (current-buffer))
-          (write-region nil nil undo-file nil 0)
+          (let ((create-lockfiles nil))
+            (write-region nil nil undo-file nil 0))
           t)))))
 
 (defun undo-fu-session--save-safe ()

Reply via email to