diff options
-rw-r--r-- | lib/hash.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lib/hash.c b/lib/hash.c index 89078d1f3..786228f8b 100644 --- a/lib/hash.c +++ b/lib/hash.c @@ -156,14 +156,15 @@ Curl_hash_add(curl_hash *h, char *key, size_t key_len, void *p) } he = mk_hash_element(key, key_len, p); - if (!he) - return NULL; /* failure */ - - if (Curl_llist_insert_next(l, l->tail, he)) { - ++h->size; - return p; /* return the new entry */ + if (he) { + if(Curl_llist_insert_next(l, l->tail, he)) { + ++h->size; + return p; /* return the new entry */ + } + /* couldn't insert it, destroy the 'he' element again */ + hash_element_dtor(h, he); } - + h->dtor(p); /* remove the NEW entry */ return NULL; /* failure */ } |