summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Zalamena <rzalamena@users.noreply.github.com>2018-07-06 12:30:06 -0300
committerGitHub <noreply@github.com>2018-07-06 12:30:06 -0300
commit76f17a8cc4346efabe5f87b5b2578ed6c8ee6fbf (patch)
tree13cabf590c3a7bde21a8aa01fb805ab2e5c20bb6
parent9d90a8608373c1312b36582a72793a750665a7fe (diff)
parentd76345fa669174c16c6ea746cdf51d77126eea35 (diff)
Merge pull request #2630 from donaldsharp/hashables
revert hash_walk/iterate optimizations
-rw-r--r--lib/hash.c12
-rw-r--r--lib/hash.h8
2 files changed, 7 insertions, 13 deletions
diff --git a/lib/hash.c b/lib/hash.c
index 37f6cdcc8f..ee5401b236 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -241,21 +241,15 @@ void hash_iterate(struct hash *hash, void (*func)(struct hash_backet *, void *),
unsigned int i;
struct hash_backet *hb;
struct hash_backet *hbnext;
- uint32_t count = 0;
- for (i = 0; i < hash->size; i++) {
+ for (i = 0; i < hash->size; i++)
for (hb = hash->index[i]; hb; hb = hbnext) {
/* get pointer to next hash backet here, in case (*func)
* decides to delete hb by calling hash_release
*/
hbnext = hb->next;
(*func)(hb, arg);
- count++;
-
}
- if (count == hash->count)
- return;
- }
}
void hash_walk(struct hash *hash, int (*func)(struct hash_backet *, void *),
@@ -265,7 +259,6 @@ void hash_walk(struct hash *hash, int (*func)(struct hash_backet *, void *),
struct hash_backet *hb;
struct hash_backet *hbnext;
int ret = HASHWALK_CONTINUE;
- uint32_t count = 0;
for (i = 0; i < hash->size; i++) {
for (hb = hash->index[i]; hb; hb = hbnext) {
@@ -276,10 +269,7 @@ void hash_walk(struct hash *hash, int (*func)(struct hash_backet *, void *),
ret = (*func)(hb, arg);
if (ret == HASHWALK_ABORT)
return;
- count++;
}
- if (count == hash->count)
- return;
}
}
diff --git a/lib/hash.h b/lib/hash.h
index c7e670b723..12c214e469 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -232,7 +232,9 @@ extern void *hash_release(struct hash *hash, void *data);
* Iterate over the elements in a hash table.
*
* It is safe to delete items passed to the iteration function from the hash
- * table during iteration.
+ * table during iteration. Please note that adding entries to the hash
+ * during the walk will cause undefined behavior in that some new entries
+ * will be walked and some will not. So do not do this.
*
* hash
* hash table to operate on
@@ -250,7 +252,9 @@ extern void hash_iterate(struct hash *hash,
* Iterate over the elements in a hash table, stopping on condition.
*
* It is safe to delete items passed to the iteration function from the hash
- * table during iteration.
+ * table during iteration. Please note that adding entries to the hash
+ * during the walk will cause undefined behavior in that some new entries
+ * will be walked and some will not. So do not do this.
*
* hash
* hash table to operate on