2012-02-09
2012-02-09 13:29:48 by Arne Goedeke <el@laramies.com>
-
0de007a6dab1a063be5d74ad488b00e3ba749e9e
(44 lines)
(+18/-26)
[
Show
| Annotate
]
Branch: arne/block_alloc
traverse both buckets at once
319: Inside #if defined(COUNT)
#ifdef COUNT
count_name = "hash";
#endif
- #ifdef BA_DEBUG
- int c = 0;
- #endif
- ba_page_t n;
+
ba_page p;
- n = a->htable[hash1(a, ptr) & BA_HASH_MASK(a)];
- while (n) {
- p = BA_PAGE(a, n);
+ ba_page_t n1, n2;
+ n1 = a->htable[hash1(a, ptr) & BA_HASH_MASK(a)];
+ n2 = a->htable[hash2(a, ptr) & BA_HASH_MASK(a)];
+
+ while (n1 || n2) {
+ if (n1) {
+ p = BA_PAGE(a, n1);
if (BA_CHECK_PTR(a, p, ptr)) {
- INC(good);
- return n;
+ return n1;
}
- n = p->hchain;
+ n1 = p->hchain;
}
- n = a->htable[hash2(a, ptr) & BA_HASH_MASK(a)];
- while (n) {
- p = BA_PAGE(a, n);
+ if (n2) {
+ p = BA_PAGE(a, n2);
if (BA_CHECK_PTR(a, p, ptr)) {
- if (a->htable[hash1(a, ptr) & BA_HASH_MASK(a)])
- INC(ugly);
- else INC(bad);
- return n;
+ return n2;
}
- #ifdef BA_DEBUG
- if (c++ > a->allocated) {
- Pike_error("hash chain is infinite\n");
+ n2 = p->hchain;
}
- #endif
- n = p->hchain;
+
}
return 0;