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): remove Lst_ForEachUntilConcurrent



details:   https://anonhg.NetBSD.org/src/rev/87ac98edcdce
branches:  trunk
changeset: 956149:87ac98edcdce
user:      rillig <rillig%NetBSD.org@localhost>
date:      Fri Oct 23 04:58:33 2020 +0000

description:
make(1): remove Lst_ForEachUntilConcurrent

The remaining callers of that function don't modify the list
structurally and thus can use the simpler Lst_ForEachUntil instead.

diffstat:

 usr.bin/make/lst.c  |  67 +---------------------------------------------------
 usr.bin/make/lst.h  |  13 +++------
 usr.bin/make/make.c |  14 ++++------
 3 files changed, 13 insertions(+), 81 deletions(-)

diffs (200 lines):

diff -r 2cb40af9e4b7 -r 87ac98edcdce usr.bin/make/lst.c
--- a/usr.bin/make/lst.c        Fri Oct 23 00:25:45 2020 +0000
+++ b/usr.bin/make/lst.c        Fri Oct 23 04:58:33 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lst.c,v 1.82 2020/10/22 21:27:24 rillig Exp $ */
+/* $NetBSD: lst.c,v 1.83 2020/10/23 04:58:33 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -34,7 +34,7 @@
 
 #include "make.h"
 
-MAKE_RCSID("$NetBSD: lst.c,v 1.82 2020/10/22 21:27:24 rillig Exp $");
+MAKE_RCSID("$NetBSD: lst.c,v 1.83 2020/10/23 04:58:33 rillig Exp $");
 
 /* Allocate and initialize a list node.
  *
@@ -44,8 +44,6 @@
 LstNodeNew(void *datum)
 {
     ListNode *node = bmake_malloc(sizeof *node);
-    node->priv_useCount = 0;
-    node->priv_deleted = FALSE;
     node->datum = datum;
     return node;
 }
@@ -214,16 +212,6 @@
     if (list->last == node) {
        list->last = node->prev;
     }
-
-    /*
-     * note that the datum is unmolested. The caller must free it as
-     * necessary and as expected.
-     */
-    if (node->priv_useCount == 0) {
-       free(node);
-    } else {
-       node->priv_deleted = TRUE;
-    }
 }
 
 /* Replace the datum in the given node with the new datum. */
@@ -293,9 +281,6 @@
     return NULL;
 }
 
-/* Apply the given function to each element of the given list, until the
- * function returns non-zero. During this iteration, the list must not be
- * modified structurally. */
 int
 Lst_ForEachUntil(List *list, LstActionUntilProc proc, void *procData)
 {
@@ -310,54 +295,6 @@
     return result;
 }
 
-/* Apply the given function to each element of the given list. The function
- * should return 0 if traversal should continue and non-zero if it should
- * abort. */
-int
-Lst_ForEachUntilConcurrent(List *list, LstActionUntilProc proc, void *procData)
-{
-    ListNode *tln = list->first;
-    int result = 0;
-
-    while (tln != NULL) {
-       /*
-        * Take care of having the current element deleted out from under
-        * us.
-        */
-       ListNode *next = tln->next;
-
-       /*
-        * We're done with the traversal if
-        *  - the next node to examine doesn't exist and
-        *  - nothing's been added after the current node (check this
-        *    after proc() has been called).
-        */
-       Boolean done = next == NULL;
-
-       tln->priv_useCount++;
-       result = proc(tln->datum, procData);
-       tln->priv_useCount--;
-
-       /*
-        * Now check whether a node has been added.
-        * Note: this doesn't work if this node was deleted before
-        *       the new node was added.
-        */
-       if (next != tln->next) {
-           next = tln->next;
-           done = FALSE;
-       }
-
-       if (tln->priv_deleted)
-           free(tln);
-       tln = next;
-       if (result || LstIsEmpty(list) || done)
-           break;
-    }
-
-    return result;
-}
-
 /* Move all nodes from list2 to the end of list1.
  * List2 is destroyed and freed. */
 void
diff -r 2cb40af9e4b7 -r 87ac98edcdce usr.bin/make/lst.h
--- a/usr.bin/make/lst.h        Fri Oct 23 00:25:45 2020 +0000
+++ b/usr.bin/make/lst.h        Fri Oct 23 04:58:33 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lst.h,v 1.77 2020/10/22 21:27:24 rillig Exp $  */
+/*     $NetBSD: lst.h,v 1.78 2020/10/23 04:58:33 rillig Exp $  */
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -90,10 +90,6 @@
 struct ListNode {
     ListNode *prev;            /* previous node in list, or NULL */
     ListNode *next;            /* next node in list, or NULL */
-    uint8_t priv_useCount;     /* Count of functions using the node.
-                                * node may not be deleted until count
-                                * goes to 0 */
-    Boolean priv_deleted;      /* List node should be removed when done */
     union {
        void *datum;            /* datum associated with this element */
        const struct GNode *priv_gnode; /* alias, just for debugging */
@@ -164,10 +160,11 @@
 
 /* Iterating over a list, using a callback function */
 
-/* Apply a function to each datum of the list, until the callback function
- * returns non-zero. */
+/* Run the action for each datum of the list, until the action returns
+ * non-zero.
+ *
+ * During this iteration, the list must not be modified structurally. */
 int Lst_ForEachUntil(List *, LstActionUntilProc, void *);
-int Lst_ForEachUntilConcurrent(List *, LstActionUntilProc, void *);
 
 /* Iterating over a list while keeping track of the current node and possible
  * concurrent modifications */
diff -r 2cb40af9e4b7 -r 87ac98edcdce usr.bin/make/make.c
--- a/usr.bin/make/make.c       Fri Oct 23 00:25:45 2020 +0000
+++ b/usr.bin/make/make.c       Fri Oct 23 04:58:33 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: make.c,v 1.175 2020/10/22 21:53:01 rillig Exp $        */
+/*     $NetBSD: make.c,v 1.176 2020/10/23 04:58:33 rillig Exp $        */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -107,7 +107,7 @@
 #include    "job.h"
 
 /*     "@(#)make.c     8.1 (Berkeley) 6/6/93"  */
-MAKE_RCSID("$NetBSD: make.c,v 1.175 2020/10/22 21:53:01 rillig Exp $");
+MAKE_RCSID("$NetBSD: make.c,v 1.176 2020/10/23 04:58:33 rillig Exp $");
 
 /* Sequence # to detect recursion. */
 static unsigned int checked = 1;
@@ -645,8 +645,7 @@
     parents = centurion->parents;
 
     /* If this was a .ORDER node, schedule the RHS */
-    Lst_ForEachUntilConcurrent(centurion->order_succ,
-                              MakeBuildParent, toBeMade->first);
+    Lst_ForEachUntil(centurion->order_succ, MakeBuildParent, toBeMade->first);
 
     /* Now mark all the parents as having one less unmade child */
     for (ln = parents->first; ln != NULL; ln = ln->next) {
@@ -901,7 +900,7 @@
        Lst_InsertBefore(toBeMade, toBeMade_next, cn);
 
     if (cn->unmade_cohorts != 0)
-       Lst_ForEachUntilConcurrent(cn->cohorts, MakeBuildChild, toBeMade_next);
+       Lst_ForEachUntil(cn->cohorts, MakeBuildChild, toBeMade_next);
 
     /*
      * If this node is a .WAIT node with unmade children
@@ -968,8 +967,7 @@
             * just before the current first element.
             */
            gn->made = DEFERRED;
-           Lst_ForEachUntilConcurrent(gn->children,
-                                      MakeBuildChild, toBeMade->first);
+           Lst_ForEachUntil(gn->children, MakeBuildChild, toBeMade->first);
            /* and drop this node on the floor */
            DEBUG2(MAKE, "dropped %s%s\n", gn->name, gn->cohort_num);
            continue;
@@ -1177,7 +1175,7 @@
            Suff_FindDeps(gn);
        else {
            /* Pretend we made all this node's children */
-           Lst_ForEachUntilConcurrent(gn->children, MakeFindChild, gn);
+           Lst_ForEachUntil(gn->children, MakeFindChild, gn);
            if (gn->unmade != 0)
                    printf("Warning: %s%s still has %d unmade children\n",
                            gn->name, gn->cohort_num, gn->unmade);



Home | Main Index | Thread Index | Old Index