Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make(1): clean up cached_stats



details:   https://anonhg.NetBSD.org/src/rev/540c0b1404e2
branches:  trunk
changeset: 957000:540c0b1404e2
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Nov 14 11:22:17 2020 +0000

description:
make(1): clean up cached_stats

No functional change.

diffstat:

 usr.bin/make/dir.c |  36 ++++++++++++++++++++----------------
 1 files changed, 20 insertions(+), 16 deletions(-)

diffs (100 lines):

diff -r 8392448e4455 -r 540c0b1404e2 usr.bin/make/dir.c
--- a/usr.bin/make/dir.c        Sat Nov 14 09:11:55 2020 +0000
+++ b/usr.bin/make/dir.c        Sat Nov 14 11:22:17 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: dir.c,v 1.205 2020/11/14 06:15:11 rillig Exp $ */
+/*     $NetBSD: dir.c,v 1.206 2020/11/14 11:22:17 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -134,7 +134,7 @@
 #include "job.h"
 
 /*     "@(#)dir.c      8.2 (Berkeley) 1/2/94"  */
-MAKE_RCSID("$NetBSD: dir.c,v 1.205 2020/11/14 06:15:11 rillig Exp $");
+MAKE_RCSID("$NetBSD: dir.c,v 1.206 2020/11/14 11:22:17 rillig Exp $");
 
 #define DIR_DEBUG0(text) DEBUG0(DIR, text)
 #define DIR_DEBUG1(fmt, arg1) DEBUG1(DIR, fmt, arg1)
@@ -273,7 +273,7 @@
     Lst_Remove(odirs->list, ln);
 }
 
-static OpenDirs openDirs;      /* the list of all open directories */
+static OpenDirs openDirs;      /* all cached directories */
 
 /*
  * Variables for gathering statistics on the efficiency of the caching
@@ -305,12 +305,11 @@
  * mtime and mode are all we care about.
  */
 struct cache_st {
-    time_t lmtime;             /* lstat */
+    time_t lmtime;             /* lstat; XXX: is probably redundant */
     time_t mtime;              /* stat */
     mode_t mode;
 };
 
-/* minimize changes below */
 typedef enum CachedStatsFlags {
     CST_NONE   = 0,
     CST_LSTAT  = 1 << 0,       /* call lstat(2) instead of stat(2) */
@@ -319,7 +318,7 @@
 
 /* Returns 0 and the result of stat(2) or lstat(2) in *mst, or -1 on error. */
 static int
-cached_stats(HashTable *htp, const char *pathname, struct make_stat *mst,
+cached_stats(HashTable *tbl, const char *pathname, struct make_stat *mst,
             CachedStatsFlags flags)
 {
     HashEntry *entry;
@@ -328,20 +327,24 @@
     int rc;
 
     if (pathname == NULL || pathname[0] == '\0')
-       return -1;
+       return -1;              /* This can happen in meta mode. */
 
-    entry = HashTable_FindEntry(htp, pathname);
+    entry = HashTable_FindEntry(tbl, pathname);
 
-    if (entry && !(flags & CST_UPDATE)) {
+    if (entry != NULL && !(flags & CST_UPDATE)) {
        cst = HashEntry_Get(entry);
 
        mst->mst_mode = cst->mode;
        mst->mst_mtime = (flags & CST_LSTAT) ? cst->lmtime : cst->mtime;
-       if (mst->mst_mtime) {
+       /* XXX: Checking for mst_mtime != 0 is probably redundant since
+        * nonexistent files are not cached. */
+       if (mst->mst_mtime != 0) {
            DIR_DEBUG2("Using cached time %s for %s\n",
                       Targ_FmtTime(mst->mst_mtime), pathname);
            return 0;
        }
+       /* Continue with the normal lookup to see whether the file has been
+        * created in the meantime. */
     }
 
     rc = (flags & CST_LSTAT)
@@ -356,13 +359,14 @@
     mst->mst_mode = sys_st.st_mode;
     mst->mst_mtime = sys_st.st_mtime;
 
-    if (entry == NULL)
-       entry = HashTable_CreateEntry(htp, pathname, NULL);
-    if (HashEntry_Get(entry) == NULL) {
-       HashEntry_Set(entry, bmake_malloc(sizeof *cst));
-       memset(HashEntry_Get(entry), 0, sizeof *cst);
+    if (entry != NULL)
+       cst = entry->value;
+    else {
+       entry = HashTable_CreateEntry(tbl, pathname, NULL);
+       cst = bmake_malloc(sizeof *cst);
+       memset(cst, 0, sizeof *cst);
+       HashEntry_Set(entry, cst);
     }
-    cst = HashEntry_Get(entry);
     if (flags & CST_LSTAT) {
        cst->lmtime = sys_st.st_mtime;
     } else {



Home | Main Index | Thread Index | Old Index