From fe3321f91ae331d3f1d4a389f28fdf02f74da7e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Tue, 11 Jul 2023 00:27:31 +0200 Subject: [PATCH] cache: 'file-expiration-time' uses 'lstat', not 'stat'. Fixes a bug whereby 'cached-channel-instance' would potentially consider cache entries obsolete too early because they refer to items in the store, which is mounted as 'noatime' on Guix System. * guix/cache.scm (file-expiration-time): Use 'lstat' and 'false-if-exception' rather than 'stat'. This matches what (guix scripts shell) does. --- guix/cache.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guix/cache.scm b/guix/cache.scm index be0de90e67..6a91c7d3ef 100644 --- a/guix/cache.scm +++ b/guix/cache.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2020, 2021 Ludovic Courtès +;;; Copyright © 2013-2017, 2020-2021, 2023 Ludovic Courtès ;;; Copyright © 2022 Simon Tournier ;;; ;;; This file is part of GNU Guix. @@ -55,7 +55,7 @@ (define* (file-expiration-time ttl #:optional (timestamp stat:atime)) time\" computed as its timestamp + TTL seconds. Call TIMESTAMP to obtain the relevant timestamp from the result of 'stat'." (lambda (file) - (match (stat file #f) + (match (false-if-exception (lstat file)) (#f 0) ;FILE may have been deleted in the meantime (st (+ (timestamp st) ttl)))))