X-Git-Url: http://the.earth.li/gitweb/?a=blobdiff_plain;f=hash.c;h=e131d032b576281d1ad98e478b04185e57654cf2;hb=f86410ff8aa00dc5c584541f387f77515a8cbd89;hp=82dfcc7c04a560a2a8508c4486efeebbae1c5d94;hpb=4b8483ae278577a3adc8d84da81d77019704466f;p=onak.git diff --git a/hash.c b/hash.c index 82dfcc7..e131d03 100644 --- a/hash.c +++ b/hash.c @@ -11,7 +11,9 @@ #include "hash.h" #include "keydb.h" +#include "keyid.h" #include "ll.h" +#include "mem.h" #include "stats.h" /** @@ -37,6 +39,35 @@ void inithash(void) elements = 0; } +/** + * destroyhash - Clean up the hash after use. + * + * This function destroys the hash after use, freeing any memory that was + * used during its lifetime. + */ +void destroyhash(void) +{ + int i; + struct ll *curll = NULL; + + for (i = 0; i < HASHSIZE; i++) { + curll = hashtable[i]; + /* + * TODO: The problem is the object has pointers that + * need freed too. + */ + llfree(curll, free_statskey); + hashtable[i] = NULL; + } + elements = 0; +} + +/** + * addtohash - Adds a key to the hash. + * @key: The key to add. + * + * Takes a key and stores it in the hash. + */ void addtohash(struct stats_key *key) { ++elements; @@ -108,6 +139,10 @@ struct ll *hash_getkeysigs(uint64_t keyid) { struct stats_key *key = NULL; + if (keyid == 0) { + return NULL; + } + key = findinhash(keyid); if (key == NULL) { key = malloc(sizeof(*key));