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

From: "N. Jackson" <[email-masked]>
Date: Sat, 15 Mar 2025 18:03:00 +0000

At 17:43 +0000 on Saturday 2025-03-15, Ihor Radchenko wrote:
>
> "N. Jackson" <[email-masked]> writes:
>
>> By the way, the previous diff (for the atomic write juggle for
>> Windows systems) results in errors like these:
>>
>> Error running timer `org-persist--refresh-gc-lock': (file-already-exists "File already exists" "/tmp/org-persist-1p8805")
>> ...
>> I think you need the 'overwrite flag in the call to rename-file.
>> I.e.:
>>
>>       (let ((tmp-file-2 (make-temp-file "org-persist-")))
>>         ;; Just renaming may still not be atomic on Windows, so we do
>>         ;; a bit more complex juggle.
>>         (rename-file file tmp-file-2 'overwrite)
>>         (rename-file tmp-file file 'overwrite)
>>         (delete-file tmp-file-2)))
>
> Ouch. Not 'overwrite flag, but `make-temp-name' instead of `make-temp-file'.

For tmp-file you are using make-temp-file and then you use
'overwrite.  I suppose it's probably best if tmp-file-2 is handled
similarly.  (Unless there's a reason not to that I'm missing.)
Also, in the doc string:

  There is a race condition between calling `make-temp-name' and
  later creating the file, which opens all kinds of security holes.
  For that reason, you should normally use `make-temp-file' instead.