From c3f830d5f04f88f904c41d6f2b328501f76386a6 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Tue, 11 Feb 2020 19:31:07 +0000 Subject: [PATCH] git-cache-proxy: Do not update timestamp due to housekeeping gc Otherwise gc will always reset the timestamp and nothing will be cleaned up. Signed-off-by: Ian Jackson --- scripts/git-cache-proxy | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/scripts/git-cache-proxy b/scripts/git-cache-proxy index 762cacb..62fb95f 100755 --- a/scripts/git-cache-proxy +++ b/scripts/git-cache-proxy @@ -198,12 +198,13 @@ for (;;) { #---------- utility functions ---------- -sub lockfile ($$$) { - my ($fh, $fn, $flockmode) = @_; +sub lockfile ($$$$) { + my ($fh, $fn, $flockmode, $update_ts) = @_; my $what = $fn.(($flockmode & ~LOCK_NB) == LOCK_SH ? " (shared)" : ""); for (;;) { close $fh; - open $fh, '+>', $fn or fail "open/create $fn for lock: $!"; + open $fh, ($update_ts ? '+>' : '+>>'), $fn + or fail "open/create $fn for lock: $!"; logm 'debug', "lock $what: acquiring"; if (!flock $fh, $flockmode) { if ($flockmode & LOCK_NB && $! == EWOULDBLOCK) { @@ -315,7 +316,7 @@ sub update_gcstamp ($) { } sub clonefetch () { - lockfile \*LOCK, $lock, LOCK_EX; + lockfile \*LOCK, $lock, LOCK_EX, 1; my $exists = lstat $gitd; $exists or $!==ENOENT or fail "lstat $gitd: $!"; @@ -408,7 +409,7 @@ sub clonefetch () { } servinfo "sharing"; - lockfile \*LOCK, $lock, LOCK_SH; # NB releases and relocks + lockfile \*LOCK, $lock, LOCK_SH, 1; # NB releases and relocks if (stat $gitd) { return 1; @@ -507,7 +508,7 @@ sub housekeeping () { } }; } - if (!lockfile \*LOCK, $lock, LOCK_EX|$mode_locknb) { + if (!lockfile \*LOCK, $lock, LOCK_EX|$mode_locknb, 0) { die $! unless $mode_locknb; logm 'info', "housekeeping: subdirs $subdir: lock busy, skipping"; next; @@ -523,7 +524,7 @@ sub housekeeping () { sub housekeepingcheck ($$) { my ($dofork, $force) = @_; if (!$force) { - if (!lockfile \*HLOCK, "Housekeeping.lock", LOCK_EX|LOCK_NB) { + if (!lockfile \*HLOCK, "Housekeeping.lock", LOCK_EX|LOCK_NB, 1) { logm 'debug', "housekeeping lock taken, not running"; close HLOCK; return 0; -- 2.30.2