[augeas-devel] augeas: master - * src/hash.c (hash_free_nodes): simplify and accelerate

David Lutterkort lutter at fedoraproject.org
Fri Mar 27 23:29:07 UTC 2009


Gitweb:        http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=6672ea305de0f216d821d0f81b53a9d9649f8a42
Commit:        6672ea305de0f216d821d0f81b53a9d9649f8a42
Parent:        70ae697121f6465a2d95f7b9eb33dacc98da8c17
Author:        David Lutterkort <lutter at redhat.com>
AuthorDate:    Fri Mar 27 15:59:48 2009 -0700
Committer:     David Lutterkort <lutter at redhat.com>
CommitterDate: Fri Mar 27 15:59:48 2009 -0700

* src/hash.c (hash_free_nodes): simplify and accelerate

Reduces time to typecheck grub.aug from 9.8s to 8.5s on my machine.
---
 src/hash.c |   17 +++++++++++------
 1 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/hash.c b/src/hash.c
index f35a9d2..892532f 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -357,12 +357,17 @@ void hash_set_allocator(hash_t *hash, hnode_alloc_t al,
 
 void hash_free_nodes(hash_t *hash)
 {
-    hscan_t hs;
-    hnode_t *node;
-    hash_scan_begin(&hs, hash);
-    while ((node = hash_scan_next(&hs))) {
-	hash_scan_delete(hash, node);
-	hash->freenode(node, hash->context);
+    hnode_t *node, *next;
+    hash_val_t chain;
+
+    for (chain = 0; chain < hash->nchains; chain ++) {
+      node = hash->table[chain];
+      while (node != NULL) {
+        next = node->next;
+        hash->freenode(node, hash->context);
+        node = next;
+      }
+      hash->table[chain] = NULL;
     }
     hash->nodecount = 0;
     clear_table(hash);




More information about the augeas-devel mailing list