Document NULL-ness of the return value of the dedup allocation functions.
Avoid conflict with reserved name 'free'.
Remove a few pointless asserts.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14538 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_deduppoolalloc.c b/coregrind/m_deduppoolalloc.c
index 05e03b6..8a203e8 100644
--- a/coregrind/m_deduppoolalloc.c
+++ b/coregrind/m_deduppoolalloc.c
@@ -42,9 +42,9 @@
SizeT poolSzB; /* Minimum size of a pool. */
SizeT fixedSzb; /* If using VG_(allocFixedEltDedupPA), size of elements */
SizeT eltAlign;
- void* (*alloc)(const HChar*, SizeT); /* pool allocator */
- const HChar* cc; /* pool allocator's cc */
- void (*free)(void*); /* pool allocator's free-er */
+ void* (*alloc_fn)(const HChar*, SizeT); /* pool allocator */
+ const HChar* cc; /* pool allocator's cost centre */
+ void (*free_fn)(void*); /* pool allocator's deallocation function */
/* XArray of void* (pointers to pools). The pools themselves.
Each element is a pointer to a block of size at least PoolSzB bytes.
The last block might be smaller due to a call to shrink_block. */
@@ -80,34 +80,33 @@
}
ht_node;
-extern DedupPoolAlloc* VG_(newDedupPA) ( SizeT poolSzB,
- SizeT eltAlign,
- void* (*alloc)(const HChar*, SizeT),
- const HChar* cc,
- void (*free_fn)(void*) )
+DedupPoolAlloc* VG_(newDedupPA) ( SizeT poolSzB,
+ SizeT eltAlign,
+ void* (*alloc_fn)(const HChar*, SizeT),
+ const HChar* cc,
+ void (*free_fn)(void*) )
{
DedupPoolAlloc* ddpa;
vg_assert(poolSzB >= eltAlign);
vg_assert(poolSzB >= 100); /* let's say */
vg_assert(poolSzB >= 10*eltAlign); /* let's say */
- vg_assert(alloc);
+ vg_assert(alloc_fn);
vg_assert(cc);
vg_assert(free_fn);
- ddpa = alloc(cc, sizeof(*ddpa));
- vg_assert(ddpa);
+ ddpa = alloc_fn(cc, sizeof(*ddpa));
VG_(memset)(ddpa, 0, sizeof(*ddpa));
ddpa->poolSzB = poolSzB;
ddpa->fixedSzb = 0;
ddpa->eltAlign = eltAlign;
- ddpa->alloc = alloc;
+ ddpa->alloc_fn = alloc_fn;
ddpa->cc = cc;
- ddpa->free = free_fn;
- ddpa->pools = VG_(newXA)( alloc, cc, free_fn, sizeof(void*) );
+ ddpa->free_fn = free_fn;
+ ddpa->pools = VG_(newXA)( alloc_fn, cc, free_fn, sizeof(void*) );
ddpa->ht_elements = VG_(HT_construct) (cc);
ddpa->ht_node_pa = VG_(newPA) ( sizeof(ht_node),
1000,
- alloc,
+ alloc_fn,
cc,
free_fn);
ddpa->curpool = NULL;
@@ -124,9 +123,9 @@
// Free data structures used for insertion.
VG_(freezeDedupPA) (ddpa, NULL);
for (i = 0; i < VG_(sizeXA) (ddpa->pools); i++)
- ddpa->free (*(UWord **)VG_(indexXA) ( ddpa->pools, i ));
+ ddpa->free_fn (*(UWord **)VG_(indexXA) ( ddpa->pools, i ));
VG_(deleteXA) (ddpa->pools);
- ddpa->free (ddpa);
+ ddpa->free_fn (ddpa);
}
static __inline__
@@ -146,13 +145,12 @@
UChar *curpool_align = ddpa_align(ddpa, ddpa->curpool);
SizeT curpool_used = ddpa->curpool_free - curpool_align;
SizeT curpool_size = ddpa->curpool_limit - ddpa->curpool + 1;
- UChar *newpool = ddpa->alloc (ddpa->cc, 2 * curpool_size);
+ UChar *newpool = ddpa->alloc_fn (ddpa->cc, 2 * curpool_size);
UChar *newpool_free = ddpa_align (ddpa, newpool);
UChar *newpool_limit = newpool + 2 * curpool_size - 1;
Word reloc_offset = (Addr)newpool_free - (Addr)curpool_align;
ht_node *n;
- vg_assert (newpool);
VG_(memcpy) (newpool_free, curpool_align, curpool_used);
/* We have reallocated the (only) pool. We need to relocate the pointers
in the hash table nodes. */
@@ -163,7 +161,7 @@
newpool_free += curpool_used;
VG_(dropHeadXA) (ddpa->pools, 1);
- ddpa->free (ddpa->curpool);
+ ddpa->free_fn (ddpa->curpool);
ddpa->curpool = newpool;
ddpa->curpool_free = newpool_free;
ddpa->curpool_limit = newpool_limit;
@@ -171,8 +169,7 @@
} else {
/* Allocate a new pool, or allocate the first/only pool for a
fixed size ddpa. */
- ddpa->curpool = ddpa->alloc( ddpa->cc, ddpa->poolSzB);
- vg_assert(ddpa->curpool);
+ ddpa->curpool = ddpa->alloc_fn( ddpa->cc, ddpa->poolSzB);
ddpa->curpool_limit = ddpa->curpool + ddpa->poolSzB - 1;
ddpa->curpool_free = ddpa_align (ddpa, ddpa->curpool);
/* add to our collection of pools */
diff --git a/include/pub_tool_deduppoolalloc.h b/include/pub_tool_deduppoolalloc.h
index c048b77..2ba7f20 100644
--- a/include/pub_tool_deduppoolalloc.h
+++ b/include/pub_tool_deduppoolalloc.h
@@ -80,23 +80,26 @@
typedef struct _DedupPoolAlloc DedupPoolAlloc;
/* Create new DedupPoolAlloc, using given allocation and free function.
- Alloc fn must not fail (that is, if it returns it must have succeeded.)
+ alloc_fn must not return NULL (that is, if it returns it must have
+ succeeded.)
poolSzB is the (minimum) size in bytes of the pool of elements allocated
with alloc.
eltAlign is the minimum required alignement for the elements allocated
- from the DedupPoolAlloc. */
+ from the DedupPoolAlloc.
+ This function never returns NULL. */
extern DedupPoolAlloc* VG_(newDedupPA) ( SizeT poolSzB,
SizeT eltAlign,
void* (*alloc)(const HChar*, SizeT),
const HChar* cc,
void (*free_fn)(void*) );
-/* Allocates a new element from ddpa with eltSzB bytes to store elt. */
+/* Allocates a new element from ddpa with eltSzB bytes to store elt.
+ This function never returns NULL. */
extern void* VG_(allocEltDedupPA) (DedupPoolAlloc *ddpa,
SizeT eltSzB, const void *elt);
/* Allocates a new (fixed size) element from ddpa. Returns the
- unique number identifying this element. */
+ unique number identifying this element. This function never returns NULL. */
extern UInt VG_(allocFixedEltDedupPA) (DedupPoolAlloc *ddpa,
SizeT eltSzB, const void *elt);