aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/hash.c15
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 */
}