GNU bug report logs - #75209
30.0.93; Emacs reader failed to read data in "/home/nlj/.cache/org-persist/gc-lock.eld"

Previous Next

Package: emacs;

Reported by: "N. Jackson" <njackson <at> posteo.net>

Date: Mon, 30 Dec 2024 18:49:01 UTC

Severity: normal

Found in version 30.0.93

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: "N. Jackson" <njackson <at> posteo.net>
Cc: yantar92 <at> posteo.net, 75209 <at> debbugs.gnu.org
Subject: bug#75209: 30.0.93; Emacs reader failed to read data in "/home/nlj/.cache/org-persist/gc-lock.eld"
Date: Sat, 25 Jan 2025 10:53:29 +0200
Ping!  Any progress with this issue?  Any new data?

> From: "N. Jackson" <njackson <at> posteo.net>
> Cc: Ihor Radchenko <yantar92 <at> posteo.net>,  75209 <at> debbugs.gnu.org
> Date: Mon, 13 Jan 2025 15:36:04 +0000
> 
> 
> At 16:34 +0200 on Saturday 2025-01-11, Eli Zaretskii wrote:
> >
> >> From: Ihor Radchenko <yantar92 <at> posteo.net>
> >> Cc: 75209 <at> debbugs.gnu.org, njackson <at> posteo.net
> >> Date: Sat, 11 Jan 2025 14:05:22 +0000
> >> 
> >> Ihor Radchenko <yantar92 <at> posteo.net> writes:
> >> 
> >> Done on Org main.
> >> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=7999433067
> >> https://git.savannah.gnu.org/cgit/emacs/org-mode.git/commit/?id=2a620113c1
> >> 
> >> I will not risk bugfix.
> >> 
> >> Hopefully, the bug is resolved now.
> >
> > Thanks, I hope the OP will be able to install the changes locally
> 
> I will do my best to do that.
> 
> The commits are against the Org "Main" branch whereas I'm running
> Emacs 30.0.93 which I where I see the warnings, and the diffs don't
> apply against this version of org-persist.el.
> 
> For example, in org-persist--write-elisp-file in Emacs 30.0.93 (at
> line 481 or org-persist.el) -- in the thick of where these changes
> are happening -- we have this horror:
> 
>     ;; Force writing even when the file happens to be opened by
>     ;; another Emacs process.
>     (cl-letf (((symbol-function #'ask-user-about-lock)
>                ;; FIXME: Emacs 27 does not yet have `always'.
>                (lambda (&rest _) t)))
> 
> This (thank goodness) had disappeared from the Org "Main" branch
> before Ihor's two commits above.
> 
> 
> IIUC Ihor's two commits make two independent fixes.
> 
> One fix (comprising all four changes in the first commit, and one of
> the changes in the second commit) is to "Write index before writing
> cache data.  This makes sure that index and data are always in
> sync."
> 
> The other fix (comprising two of the three changes in the second
> commit), is to ensure an atomic write by writing to a temp file and
> then moving that into place.
> 
> I have insufficient knowledge of Elisp and no understanding, at all
> really, of org-persist, so I am not able to attempt to make the
> first fix here, and I'm not sure that it would make sense to even
> try to do so.
> 
> The latter fix is simple and easy to think about so I have applied
> those changes to my local version of the Emacs 30.0.93 org-persist
> (patch below).  It seems quite plausible that this change (alone)
> will fix the problem of the warnings in this bug report and the
> broken timer.
> 
> > and verify them.
> 
> Verifying that any change resolves this bug is a bit tricky as it
> involves waiting for nothing to happen!  That is, if the warning
> reappears I'll be able to say that this change (alone) does not
> (by itself) resolve the problem, but if the warning doesn't reappear
> in a day, a week, a month, I won't be able to say that it never
> will reappear.
> 
> Anyway, I will run with this change and I will wait and see what
> happens.  If the problem is not solved, I wouldn't expect it to show
> itself for several days, given its usual frequency.  I'll try to
> put my machine into suspend for over an hour (so the timers fire
> "simultaneously" on resume) as often as possible to hurry things
> along.  I'll report back if the problem is not solved.
> 
> 
> This is the change I have made here for testing:
> 
> --- Emacs-30.0.93/org-persist.el	2024-12-18 17:30:29.000000000 -0500
> +++ atomic_write/org-persist.el	2025-01-12 18:58:58.230823402 -0500
> @@ -475,7 +475,8 @@
>          (print-escape-nonascii t)
>          (print-continuous-numbering t)
>          print-number-table
> -        (start-time (float-time)))
> +        (start-time (float-time))
> +        (tmp-file (make-temp-file "org-persist-")))
>      (unless (file-exists-p (file-name-directory file))
>        (make-directory (file-name-directory file) t))
>      ;; Force writing even when the file happens to be opened by
> @@ -483,12 +484,19 @@
>      (cl-letf (((symbol-function #'ask-user-about-lock)
>                 ;; FIXME: Emacs 27 does not yet have `always'.
>                 (lambda (&rest _) t)))
> -      (with-temp-file file
> +      ;; Do not write to FILE directly.  Another Emacs instance may be
> +      ;; doing the same at the same time.  Instead, write to new
> +      ;; temporary file and then rename it (renaming is atomic
> +      ;; operation that does not create data races).
> +      ;; See https://debbugs.gnu.org/cgi/bugreport.cgi?bug=75209#35
> +      (with-temp-file tmp-file
>          (insert ";;   -*- mode: lisp-data; -*-\n")
>          (if pp
>              (let ((pp-use-max-width nil)) ; Emacs bug#58687
>                (pp data (current-buffer)))
> -          (prin1 data (current-buffer)))))
> +          (prin1 data (current-buffer))))
> +      (rename-file tmp-file file 'overwrite))
> +    
>      (org-persist--display-time
>       (- (float-time) start-time)
>       "Writing to %S" file)))




This bug report was last modified 3 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.