diff options
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/hash.c | 57 | ||||
-rw-r--r-- | mysys/my_bitmap.c | 4 |
2 files changed, 43 insertions, 18 deletions
diff --git a/mysys/hash.c b/mysys/hash.c index 6f2788ddce7..1296a9289e9 100644 --- a/mysys/hash.c +++ b/mysys/hash.c @@ -72,19 +72,48 @@ _hash_init(HASH *hash,CHARSET_INFO *charset, } -void hash_free(HASH *hash) +/* + Call hash->free on all elements in hash. + + SYNOPSIS + hash_free_elements() + hash hash table + + NOTES: + Sets records to 0 +*/ + +static void inline hash_free_elements(HASH *hash) { - DBUG_ENTER("hash_free"); if (hash->free) { - uint i,records; HASH_LINK *data=dynamic_element(&hash->array,0,HASH_LINK*); - for (i=0,records=hash->records ; i < records ; i++) - (*hash->free)(data[i].data); - hash->free=0; + HASH_LINK *end= data + hash->records; + while (data < end) + (*hash->free)((data++)->data); } - delete_dynamic(&hash->array); hash->records=0; +} + + +/* + Free memory used by hash. + + SYNOPSIS + hash_free() + hash the hash to delete elements of + + NOTES: Hash can't be reused wuthing calling hash_init again. +*/ + +void hash_free(HASH *hash) +{ + DBUG_ENTER("hash_free"); + DBUG_PRINT("enter",("hash: 0x%lxd",hash)); + + hash_free_elements(hash); + hash->free= 0; + delete_dynamic(&hash->array); DBUG_VOID_RETURN; } @@ -94,21 +123,17 @@ void hash_free(HASH *hash) SYNOPSIS hash_reset() - hash the hash to delete elements of + hash the hash to delete elements of */ void hash_reset(HASH *hash) { DBUG_ENTER("hash_reset"); - if (hash->free) - { - HASH_LINK *link= dynamic_element(&hash->array, 0, HASH_LINK*); - HASH_LINK *end= link + hash->records; - for (; link < end; ++link) - (*hash->free)(link->data); - } + DBUG_PRINT("enter",("hash: 0x%lxd",hash)); + + hash_free_elements(hash); reset_dynamic(&hash->array); - hash->records= 0; + /* Set row pointers so that the hash can be reused at once */ hash->blength= 1; hash->current_record= NO_RECORD; DBUG_VOID_RETURN; diff --git a/mysys/my_bitmap.c b/mysys/my_bitmap.c index 3a09255b0b0..ca75842ffcf 100644 --- a/mysys/my_bitmap.c +++ b/mysys/my_bitmap.c @@ -38,7 +38,7 @@ #include <m_string.h> -inline void bitmap_lock(MY_BITMAP *map) +static inline void bitmap_lock(MY_BITMAP *map) { #ifdef THREAD if (map->mutex) @@ -47,7 +47,7 @@ inline void bitmap_lock(MY_BITMAP *map) } -inline void bitmap_unlock(MY_BITMAP *map) +static inline void bitmap_unlock(MY_BITMAP *map) { #ifdef THREAD if (map->mutex) |