Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-17 Thread Eric Blake
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 According to Eric Blake on 6/16/2009 9:05 AM: > I'd also like to squash this on, to fix grammar and provide some > clarification. In particular, m4 uses the idiom of deleting elements during > traversal, which is provably safe under certain conditio

hash_rehash allocatino failure (was: [PATCH] hash: declare some functions with the warn_unused_result attribute)

2009-06-17 Thread Eric Blake
Jim Meyering meyering.net> writes: > > Eric Blake wrote: > > + /* Guarantee that once we start moving entries into the new table, > > + we will not need any further memory allocations. We only need > > + new allocations if the hasher consolidates multiple buckets from > > + the old

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-17 Thread Jim Meyering
Eric Blake wrote: > + /* Guarantee that once we start moving entries into the new table, > + we will not need any further memory allocations. We only need > + new allocations if the hasher consolidates multiple buckets from > + the old size into one bucket with the new size (a sign of

hash resizing bug (was: [PATCH] hash: declare some functions with the warn_unused_result attribute)

2009-06-17 Thread Eric Blake
Jim Meyering meyering.net> writes: > > Additionally, it looks like hash_rehash has a memory leak - if new_table > > is allocated, but we later fail to allocate new_entry, the function > > returns immediately without reclaiming new_table. Which means that even > > if an application is prepared to

alt hash implementation (was: [PATCH] hash: declare some functions with the warn_unused_result attribute)

2009-06-17 Thread Eric Blake
Eric Blake byu.net> writes: > > I got bored and attempted this. This implementation still passes the m4 > testsuite, although there might be corner cases not exercised by m4 (such as > shrinking the table on hash_delete) that I got wrong, so I'm posting it for > review now. In particular, I

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-16 Thread Eric Blake
Eric Blake byu.net> writes: > Indeed, if you are frequently calling allocate_entry, the cost of malloc'ing > lots of small objects is measurably worse than using an obstack to malloc large > chunks and carve off entries as needed. In other words, it's not the speedup > from freeing multiple

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-16 Thread Jim Meyering
Eric Blake wrote: > Jim Meyering meyering.net> writes: ... > My code inspection didn't turn up obvious problems, but I have not yet tested > with USE_OBSTACK either, so I wouldn't be surprised to find bit rot. If we do > get it working, would it be worth making the use of obstacks a runtime > de

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-16 Thread Ben Pfaff
Eric Blake writes: > There might also be alternative implementations possible with > better performance. For example, instead of malloc'ing free > entries one at a time and tracking bucket overflows as pointers > to malloc'd objects, we could instead malloc/realloc an array > of overflows, with

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-16 Thread Eric Blake
Jim Meyering meyering.net> writes: > Long ago (like 12-15 years), in an application that made very heavy use > of hash tables, the obstack code provided a large performance benefit. Indeed, if you are frequently calling allocate_entry, the cost of malloc'ing lots of small objects is measurably

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-16 Thread Jim Meyering
Eric Blake wrote: > Eric Blake byu.net> writes: >> Subject: [PATCH] hash: improve memory management >> >> * lib/hash.c (hash_delete): Free entries if resize failed. >> (hash_insert): Don't leave entry on table when returning failure. >> (hash_rehash): Avoid memory leak, by guaranteeing that we won

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-16 Thread Eric Blake
Eric Blake byu.net> writes: > Subject: [PATCH] hash: improve memory management > > * lib/hash.c (hash_delete): Free entries if resize failed. > (hash_insert): Don't leave entry on table when returning failure. > (hash_rehash): Avoid memory leak, by guaranteeing that we won't > allocate once we s

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-16 Thread Eric Blake
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 According to Eric Blake on 6/15/2009 5:17 PM: >>> Additionally, it looks like hash_rehash has a memory leak - if new_table >>> is allocated, but we later fail to allocate new_entry, the function >>> returns immediately without reclaiming new_table. Wh

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-15 Thread Eric Blake
Jim Meyering meyering.net> writes: > >> We should fix this, and decide whether shrinking the hash table when > >> deletion frees up a bucket is always possible, or else deal with memory > >> allocation failure here, too. > > > > Additionally, it looks like hash_rehash has a memory leak - if new_t

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-08 Thread Jim Meyering
Eric Blake wrote: > According to Eric Blake on 6/7/2009 9:51 PM: >> According to Jim Meyering on 6/6/2009 2:41 PM: >>> A few of the function declarations in hash.h could benefit from >>> gcc's warn_unused_result attribute, so I'm adding it: >> >> Including one in hash.c itself: >> >> hash.c: In fu

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-08 Thread Eric Blake
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 According to Eric Blake on 6/7/2009 9:51 PM: > According to Jim Meyering on 6/6/2009 2:41 PM: >> A few of the function declarations in hash.h could benefit from >> gcc's warn_unused_result attribute, so I'm adding it: > > Including one in hash.c itsel

Re: [PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-07 Thread Eric Blake
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 According to Jim Meyering on 6/6/2009 2:41 PM: > A few of the function declarations in hash.h could benefit from > gcc's warn_unused_result attribute, so I'm adding it: Including one in hash.c itself: hash.c: In function `hash_delete': hash.c:1015: w

[PATCH] hash: declare some functions with the warn_unused_result attribute

2009-06-06 Thread Jim Meyering
A few of the function declarations in hash.h could benefit from gcc's warn_unused_result attribute, so I'm adding it: >From 28e62601bcb5c76e7d4a24ef7d2faaf281503353 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Sat, 6 Jun 2009 22:39:23 +0200 Subject: [PATCH] hash: declare some f