[2/3] debuginfod: Don't touch access time of new files

Message ID 20230324004805.156080-2-heftig@archlinux.org
State Committed
Headers
Series [1/3] debuginfod: Replace futimes with futimens |

Commit Message

Jan Alexander Steffens \(heftig\) March 24, 2023, 12:48 a.m. UTC
  Instead of copying the mtime, which might be far in the past, don't
touch the access time. This will prevent cache cleaning from considering
the file as old immediately.

Signed-off-by: Jan Alexander Steffens (heftig) <heftig@archlinux.org>
---
 debuginfod/debuginfod-client.c | 16 +++++++++-------
 debuginfod/debuginfod.cxx      | 10 +++++++---
 2 files changed, 16 insertions(+), 10 deletions(-)
  

Patch

diff --git a/debuginfod/debuginfod-client.c b/debuginfod/debuginfod-client.c
index 460afd5c..1a2d7573 100644
--- a/debuginfod/debuginfod-client.c
+++ b/debuginfod/debuginfod-client.c
@@ -1718,13 +1718,15 @@  debuginfod_query_server (debuginfod_client *c,
 #else
   CURLcode curl_res = curl_easy_getinfo(verified_handle, CURLINFO_FILETIME, (void*) &mtime);
 #endif
-  if (curl_res != CURLE_OK)
-    mtime = time(NULL); /* fall back to current time */
-
-  struct timespec tvs[2];
-  tvs[0].tv_sec = tvs[1].tv_sec = mtime;
-  tvs[0].tv_nsec = tvs[1].tv_nsec = 0;
-  (void) futimens (fd, tvs);  /* best effort */
+  if (curl_res == CURLE_OK)
+    {
+      struct timespec tvs[2];
+      tvs[0].tv_sec = 0;
+      tvs[0].tv_nsec = UTIME_OMIT;
+      tvs[1].tv_sec = mtime;
+      tvs[1].tv_nsec = 0;
+      (void) futimens (fd, tvs);  /* best effort */
+    }
 
   /* PR27571: make cache files casually unwriteable; dirs are already 0700 */
   (void) fchmod(fd, 0400);
diff --git a/debuginfod/debuginfod.cxx b/debuginfod/debuginfod.cxx
index b39c0591..5ef6cc32 100644
--- a/debuginfod/debuginfod.cxx
+++ b/debuginfod/debuginfod.cxx
@@ -1639,7 +1639,9 @@  extract_section (int elf_fd, int64_t parent_mtime,
 	      if (fstat (elf_fd, &fs) != 0)
 		throw libc_exception (errno, "cannot fstat file");
 
-	      tvs[0] = tvs[1] = fs.st_mtim;
+	      tvs[0].tv_sec = 0;
+	      tvs[0].tv_nsec = UTIME_OMIT;
+	      tvs[1] = fs.st_mtim;
 	      (void) futimens (fd, tvs);
 
 	      /* Add to fdcache.  */
@@ -1951,8 +1953,10 @@  handle_buildid_r_match (bool internal_req_p,
       // Set the mtime so the fdcache file mtimes, even prefetched ones,
       // propagate to future webapi clients.
       struct timespec tvs[2];
-      tvs[0].tv_sec = tvs[1].tv_sec = archive_entry_mtime(e);
-      tvs[0].tv_nsec = tvs[1].tv_nsec = archive_entry_mtime_nsec(e);
+      tvs[0].tv_sec = 0;
+      tvs[0].tv_nsec = UTIME_OMIT;
+      tvs[1].tv_sec = archive_entry_mtime(e);
+      tvs[1].tv_nsec = archive_entry_mtime_nsec(e);
       (void) futimens (fd, tvs);  /* best effort */
 
       if (r != 0) // stage 3