bug#81223: [PATCH] Fix file-missing error during async native compilation
James Cherti <[email protected]> Wed, 5 Aug 2026 15:04:00 -0400
| Newsgroups | gmane.emacs.bugs |
|---|---|
| Message-ID | <[email protected]> |
On 2026-07-29 11:18, James Cherti wrote: > Hello Andrea, > > It makes sense. I've updated the patch: > > Attached: 0001-V2-Fix-file-missing-error-during-async-native- > compilati.patch > > On 2026-07-27 11:21, Andrea Corallo wrote: >> James Cherti <[email protected]> writes: >> >>> On 2026-06-11 11:07, Sean Whitton wrote: >>>> James Cherti [11/Jun 9:41am -04] wrote: >>>>> From a8f13a55a4838a0d2ead62513c7d1a9616c1b501 Mon Sep 17 00:00:00 >>>>> 2001 >>>>> From: James Cherti <[email protected]> >>>>> Date: Thu, 11 Jun 2026 09:29:39 -0400 >>>>> Subject: [PATCH] Fix file-missing error during async native >>>>> compilation >>>>> >>>>> When a package is upgraded or deleted, the async compilation queue can >>>>> retain stale jobs for files that no longer exist on disk. >>>>> Attempting to >>>>> resolve the target .eln filename for these missing files signals a >>>>> file-missing error that disrupts the queue. >>>>> >>>>> * lisp/emacs-lisp/comp-run.el (comp--run-async-workers): Verify source >>>>> files exist before attempting to resolve their .eln paths in both the >>>>> dispatch loop and the process sentinel. >>>> >>>> Shorten these remarks and add corresponding code comments, please. >>>> >>>> Adding Philip for review since it seems primarily a package.el issue. >>> >>> You can find attached v2 of the patch >>> (0001-V2-Fix-file-missing-error-during-async-native-compilati.patch). Let me know if you have feedback on v2 or if this is ready to merge. >>> >>> Changes since the previous version: >>> - Added explanatory comments regarding the file existence checks. >>> >>> For context, I want to clarify that this fix is not specifically tied >>> to package management operations. It resolves a broader issue by >>> handling any stale jobs in the async native compilation queue where >>> the target files no longer exist on disk. >>> >>> -- >>> James Cherti >> >> Hi James, >> >> Thanks for the patch. Couple of points: >> >>> GitHub: https://github.com/jamescherti >>> Website: https://www.jamescherti.com/ >>> >>> From 55ba77809cb1d371f79eb4e59df8db819e100456 Mon Sep 17 00:00:00 2001 >>> From: James Cherti <[email protected]> >>> Date: Fri, 12 Jun 2026 06:07:23 -0400 >>> Subject: [PATCH] Fix file-missing error during async native compilation >>> >>> The async native compilation queue can sometimes retain stale jobs for >>> files that no longer exist on disk (for example, when files are removed >>> during a package upgrade or deletion). Attempting to resolve the target >>> .eln filename for these missing files signals a file-missing error. >>> >>> * lisp/emacs-lisp/comp-run.el (comp--run-async-workers): Verify source >>> files exist before attempting to resolve their .eln paths in both the >>> dispatch loop and the process sentinel. >>> --- >>> lisp/emacs-lisp/comp-run.el | 23 ++++++++++++++++++----- >>> 1 file changed, 18 insertions(+), 5 deletions(-) >>> >>> diff --git a/lisp/emacs-lisp/comp-run.el b/lisp/emacs-lisp/comp-run.el >>> index 64e20327906..c70c5b0a512 100644 >>> --- a/lisp/emacs-lisp/comp-run.el >>> +++ b/lisp/emacs-lisp/comp-run.el >>> @@ -282,13 +282,20 @@ comp--run-async-workers >>> when (or native-comp-always-compile >>> load ; Always compile when the compilation is >>> ; commanded for late load. >>> ;; Skip compilation if `comp-el-to-eln-filename' >>> fails >>> ;; to find a writable directory. >>> - (with-demoted-errors "Async compilation :%S" >>> - (file-newer-than-file-p >>> - source-file (comp-el-to-eln-filename source- >>> file)))) >>> + (and >>> + ;; Verify that the source file still exists on disk >>> + ;; as a regular file before calling >>> + ;; `comp-el-to-eln-filename'. This check prevents >>> + ;; `file-missing' errors caused by stale jobs in the >>> + ;; async compilation queue. >>> + (file-regular-p source-file) >>> + (with-demoted-errors "Async compilation :%S" >>> + (file-newer-than-file-p >>> + source-file (comp-el-to-eln-filename source- >>> file))))) >> >> The file-regular-p check in the dispatch loop is currently bypassed when >> either native-comp-always-compile or load is non-nil. Thus, stale jobs >> in those modes still start a worker. Should the check wrap the entire or >> condition? >>> Also, the sentinel still has a check-then-use race: the source can >> disappear between file-regular-p and comp-el-to-eln-filename, causing >> the sentinel to signal before restarting the queue. >> >> I'm wondering, wouldn't maybe be safer to handle file-missing around >> comp-el-to-eln-filename directly and ensure comp--run-async-workers is >> always called? > Thanks >> >> Andrea >> >> >> > > > -- > James Cherti > GitHub: https://github.com/jamescherti > Website: https://www.jamescherti.com/ -- James Cherti GitHub: https://github.com/jamescherti Website: https://www.jamescherti.com/