diff options
author | Katharina Fey <kookie@spacekookie.de> | 2019-07-14 18:41:07 +0100 |
---|---|---|
committer | Katharina Fey <kookie@spacekookie.de> | 2019-07-14 18:47:18 +0100 |
commit | f6e83e64abbf76bbfddc90f885f7c3be379ecf2c (patch) | |
tree | 726ff7b647e7cd1704b30638d8adf73c50a15dfe /bowl.c | |
parent | 98852464c7d4cd3a6a08d0208378506fdce822d6 (diff) |
Various improvements around HASH nodes
The example previously would lead to corrupt memory
when running for items that needed to re-hash the
hash array. This has been fixed.
Secondly, all HASH node memory leaks are now fixed,
that resulted from badly tracking objects through the
resize process. A new function `hash_free_shallow` was
added to help with this. The function `array_free_shallow`
is unused but might become useful in the future and so
was not removed.
The hash strategy is still garbage but this can be fixed later :)
Diffstat (limited to 'bowl.c')
-rw-r--r-- | bowl.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -31,7 +31,7 @@ err_t bowl_malloc(struct bowl **ptr, bowl_t type) switch((*ptr)->type) { case LEAF: return OK; // No further allocation needed - case ARRAY: return array_malloc(*ptr, ARRAY_START_SIZE); + case ARRAY | HASH: return array_malloc(*ptr, ARRAY_START_SIZE); default: return INVALID_STATE; } @@ -139,7 +139,8 @@ err_t bowl_free(struct bowl *self) err_t e; switch(self->type) { case LEAF: e = data_free(self->_pl.data); break; - case ARRAY | HASH: e = array_free(self); break; + case ARRAY: e = array_free(self); break; + case HASH: e = hash_free(self); break; default: e = INVALID_STATE; break; } if(e) return e; |