[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [gnurl] 152/205: hash: move key into hash struct to reduce
From: |
gnunet |
Subject: |
[GNUnet-SVN] [gnurl] 152/205: hash: move key into hash struct to reduce mallocs |
Date: |
Thu, 20 Apr 2017 16:21:32 +0200 |
This is an automated email from the git hooks/post-receive script.
ng0 pushed a commit to annotated tag gnurl-7.54.0
in repository gnurl.
commit 4f2e348f9b42c69c480bffd0188502167cf4ad07
Author: Daniel Stenberg <address@hidden>
AuthorDate: Sat Apr 1 01:12:32 2017 +0200
hash: move key into hash struct to reduce mallocs
This removes one tiny malloc for each hash struct allocated. In a simple
case like "curl localhost", this save three mallocs.
Closes #1376
---
lib/hash.c | 26 +++++++-------------------
lib/hash.h | 2 +-
2 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/lib/hash.c b/lib/hash.c
index c76bc1d95..b7305a572 100644
--- a/lib/hash.c
+++ b/lib/hash.c
@@ -37,8 +37,6 @@ hash_element_dtor(void *user, void *element)
struct curl_hash *h = (struct curl_hash *) user;
struct curl_hash_element *e = (struct curl_hash_element *) element;
- Curl_safefree(e->key);
-
if(e->ptr) {
h->dtor(e->ptr);
e->ptr = NULL;
@@ -87,23 +85,14 @@ Curl_hash_init(struct curl_hash *h,
static struct curl_hash_element *
mk_hash_element(const void *key, size_t key_len, const void *p)
{
- struct curl_hash_element *he = malloc(sizeof(struct curl_hash_element));
-
+ /* allocate the struct plus memory after it to store the key */
+ struct curl_hash_element *he = malloc(sizeof(struct curl_hash_element) +
+ key_len);
if(he) {
- void *dupkey = malloc(key_len);
- if(dupkey) {
- /* copy the key */
- memcpy(dupkey, key, key_len);
-
- he->key = dupkey;
- he->key_len = key_len;
- he->ptr = (void *) p;
- }
- else {
- /* failed to duplicate the key, free memory and fail */
- free(he);
- he = NULL;
- }
+ /* copy the key */
+ memcpy(he->key, key, key_len);
+ he->key_len = key_len;
+ he->ptr = (void *) p;
}
return he;
}
@@ -145,7 +134,6 @@ Curl_hash_add(struct curl_hash *h, void *key, size_t
key_len, void *p)
* "destructor" for the actual data 'p'. When we fail, we shall not touch
* that data.
*/
- free(he->key);
free(he);
}
diff --git a/lib/hash.h b/lib/hash.h
index 5929fc264..a345c8c87 100644
--- a/lib/hash.h
+++ b/lib/hash.h
@@ -58,8 +58,8 @@ struct curl_hash {
struct curl_hash_element {
void *ptr;
- char *key;
size_t key_len;
+ char key[1]; /* allocated memory following the struct */
};
struct curl_hash_iterator {
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [gnurl] 51/205: vtls: add options to specify range of enabled TLS versions, (continued)
- [GNUnet-SVN] [gnurl] 51/205: vtls: add options to specify range of enabled TLS versions, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 132/205: schannel: fix unused variable warning, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 103/205: CURLINFO_PRIMARY_IP.3: add example, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 81/205: BINDINGS: a Delphi binding, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 119/205: pause: handle mixed types of data when paused, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 31/205: ares: return error at once if timed out before name resolve starts, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 126/205: NTLM: check for features with #ifdef instead of #if, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 143/205: docs: Explain --fail-early does not imply --fail, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 142/205: telnet: (win32) fix read callback return variable, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 169/205: gtls: fix compiler warning, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 152/205: hash: move key into hash struct to reduce mallocs,
gnunet <=
- [GNUnet-SVN] [gnurl] 199/205: openssl: fix thread-safety bugs in error-handling, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 121/205: conncache: make hashkey avoid malloc, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 167/205: low_speed_limit: improved function for longer time periods, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 157/205: multi: fix queueing of pending easy handles, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 78/205: Improve code readbility, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 118/205: http: Fix proxy connection reuse with basic-auth, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 108/205: asiohiper: make sure socket is open in event_cb, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 140/205: libcurl.def: removed, unused, gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 182/205: openssl: fix this statement may fall through [-Wimplicit-fallthrough=], gnunet, 2017/04/20
- [GNUnet-SVN] [gnurl] 48/205: insecure.d: clarify that this is for server connections, gnunet, 2017/04/20