From: Vsevolod Stakhov Date: Tue, 24 Oct 2017 18:39:29 +0000 (+0100) Subject: [Minor] Avoid unnecessary dynamic allocation X-Git-Tag: 1.7.0~519 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=8568f4e445b50f1079790ade0b0d9b1f79eb7e3a;p=rspamd.git [Minor] Avoid unnecessary dynamic allocation --- diff --git a/src/libserver/protocol.c b/src/libserver/protocol.c index 69427e8b5..6180adccb 100644 --- a/src/libserver/protocol.c +++ b/src/libserver/protocol.c @@ -220,8 +220,8 @@ rspamd_protocol_handle_headers (struct rspamd_task *task, HASH_ITER (hh, msg->headers, header, htmp) { DL_FOREACH (header, h) { - hn = rspamd_fstring_new_init (h->name->begin, h->name->len); - hv = rspamd_fstring_new_init (h->value->begin, h->value->len); + hn = rspamd_fstring_new_init (h->name.begin, h->name.len); + hv = rspamd_fstring_new_init (h->value.begin, h->value.len); hn_tok = rspamd_ftok_map (hn); hv_tok = rspamd_ftok_map (hv); diff --git a/src/libutil/http.c b/src/libutil/http.c index 5ad9a6d14..5832f0007 100644 --- a/src/libutil/http.c +++ b/src/libutil/http.c @@ -471,17 +471,17 @@ static inline void rspamd_http_check_special_header (struct rspamd_http_connection *conn, struct rspamd_http_connection_private *priv) { - if (rspamd_ftok_casecmp (priv->header->name, &date_header) == 0) { - priv->msg->date = rspamd_http_parse_date (priv->header->value->begin, - priv->header->value->len); + if (rspamd_ftok_casecmp (&priv->header->name, &date_header) == 0) { + priv->msg->date = rspamd_http_parse_date (priv->header->value.begin, + priv->header->value.len); } - else if (rspamd_ftok_casecmp (priv->header->name, &key_header) == 0) { - rspamd_http_parse_key (priv->header->value, conn, priv); + else if (rspamd_ftok_casecmp (&priv->header->name, &key_header) == 0) { + rspamd_http_parse_key (&priv->header->value, conn, priv); } - else if (rspamd_ftok_casecmp (priv->header->name, &last_modified_header) == 0) { + else if (rspamd_ftok_casecmp (&priv->header->name, &last_modified_header) == 0) { priv->msg->last_modified = rspamd_http_parse_date ( - priv->header->value->begin, - priv->header->value->len); + priv->header->value.begin, + priv->header->value.len); } } @@ -527,18 +527,18 @@ rspamd_http_finish_header (struct rspamd_http_connection *conn, priv->header->combined = rspamd_fstring_append (priv->header->combined, "\r\n", 2); - priv->header->value->len = priv->header->combined->len - - priv->header->name->len - 4; - priv->header->value->begin = priv->header->combined->str + - priv->header->name->len + 2; - priv->header->name->begin = priv->header->combined->str; + priv->header->value.len = priv->header->combined->len - + priv->header->name.len - 4; + priv->header->value.begin = priv->header->combined->str + + priv->header->name.len + 2; + priv->header->name.begin = priv->header->combined->str; - HASH_FIND (hh, priv->msg->headers, priv->header->name->begin, - priv->header->name->len, hdr); + HASH_FIND (hh, priv->msg->headers, priv->header->name.begin, + priv->header->name.len, hdr); if (hdr == NULL) { - HASH_ADD_KEYPTR (hh, priv->msg->headers, priv->header->name->begin, - priv->header->name->len, priv->header); + HASH_ADD_KEYPTR (hh, priv->msg->headers, priv->header->name.begin, + priv->header->name.len, priv->header); } DL_APPEND (hdr, priv->header); @@ -550,8 +550,6 @@ static void rspamd_http_init_header (struct rspamd_http_connection_private *priv) { priv->header = g_slice_alloc0 (sizeof (struct rspamd_http_header)); - priv->header->name = g_slice_alloc0 (sizeof (*priv->header->name)); - priv->header->value = g_slice_alloc0 (sizeof (*priv->header->value)); priv->header->combined = rspamd_fstring_new (); } @@ -601,7 +599,7 @@ rspamd_http_on_header_value (http_parser * parser, priv->flags |= RSPAMD_HTTP_CONN_FLAG_NEW_HEADER; priv->header->combined = rspamd_fstring_append (priv->header->combined, ": ", 2); - priv->header->name->len = priv->header->combined->len - 2; + priv->header->name.len = priv->header->combined->len - 2; } priv->header->combined = rspamd_fstring_append (priv->header->combined, @@ -862,8 +860,6 @@ rspamd_http_decrypt_message (struct rspamd_http_connection *conn, DL_FOREACH_SAFE (hdr, hcur, hcurtmp) { rspamd_fstring_free (hcur->combined); - g_slice_free1 (sizeof (*hcur->name), hcur->name); - g_slice_free1 (sizeof (*hcur->value), hcur->value); g_slice_free1 (sizeof (struct rspamd_http_header), hcur); } } @@ -1490,21 +1486,20 @@ rspamd_http_connection_copy_msg (struct rspamd_http_message *msg) DL_FOREACH (hdr, hcur) { nhdr = g_slice_alloc (sizeof (struct rspamd_http_header)); - nhdr->name = g_slice_alloc (sizeof (*hcur->name)); - nhdr->value = g_slice_alloc (sizeof (*hcur->value)); + nhdr->combined = rspamd_fstring_new_init (hcur->combined->str, hcur->combined->len); - nhdr->name->begin = nhdr->combined->str + - (hcur->name->begin - hcur->combined->str); - nhdr->name->len = hcur->name->len; - nhdr->value->begin = nhdr->combined->str + - (hcur->value->begin - hcur->combined->str); - nhdr->value->len = hcur->value->len; + nhdr->name.begin = nhdr->combined->str + + (hcur->name.begin - hcur->combined->str); + nhdr->name.len = hcur->name.len; + nhdr->value.begin = nhdr->combined->str + + (hcur->value.begin - hcur->combined->str); + nhdr->value.len = hcur->value.len; DL_APPEND (nhdrs, nhdr); } - HASH_ADD_KEYPTR (hh, new_msg->headers, nhdrs->name->begin, - nhdrs->name->len, nhdrs); + HASH_ADD_KEYPTR (hh, new_msg->headers, nhdrs->name.begin, + nhdrs->name.len, nhdrs); } return new_msg; @@ -2808,8 +2803,6 @@ rspamd_http_message_free (struct rspamd_http_message *msg) DL_FOREACH_SAFE (hdr, hcur, hcurtmp) { rspamd_fstring_free (hcur->combined); - g_slice_free1 (sizeof (*hcur->name), hcur->name); - g_slice_free1 (sizeof (*hcur->value), hcur->value); g_slice_free1 (sizeof (struct rspamd_http_header), hcur); } } @@ -2865,19 +2858,17 @@ rspamd_http_message_add_header_len (struct rspamd_http_message *msg, hdr->combined = rspamd_fstring_sized_new (nlen + vlen + 4); rspamd_printf_fstring (&hdr->combined, "%s: %*s\r\n", name, (gint)vlen, value); - hdr->value = g_slice_alloc (sizeof (*hdr->value)); - hdr->name = g_slice_alloc (sizeof (*hdr->name)); - hdr->name->begin = hdr->combined->str; - hdr->name->len = nlen; - hdr->value->begin = hdr->combined->str + nlen + 2; - hdr->value->len = vlen; + hdr->name.begin = hdr->combined->str; + hdr->name.len = nlen; + hdr->value.begin = hdr->combined->str + nlen + 2; + hdr->value.len = vlen; - HASH_FIND (hh, msg->headers, hdr->name->begin, - hdr->name->len, found); + HASH_FIND (hh, msg->headers, hdr->name.begin, + hdr->name.len, found); if (found == NULL) { - HASH_ADD_KEYPTR (hh, msg->headers, hdr->name->begin, - hdr->name->len, hdr); + HASH_ADD_KEYPTR (hh, msg->headers, hdr->name.begin, + hdr->name.len, hdr); } DL_APPEND (found, hdr); @@ -2908,19 +2899,17 @@ rspamd_http_message_add_header_fstr (struct rspamd_http_message *msg, vlen = value->len; hdr->combined = rspamd_fstring_sized_new (nlen + vlen + 4); rspamd_printf_fstring (&hdr->combined, "%s: %V\r\n", name, value); - hdr->value = g_slice_alloc (sizeof (*hdr->value)); - hdr->name = g_slice_alloc (sizeof (*hdr->name)); - hdr->name->begin = hdr->combined->str; - hdr->name->len = nlen; - hdr->value->begin = hdr->combined->str + nlen + 2; - hdr->value->len = vlen; + hdr->name.begin = hdr->combined->str; + hdr->name.len = nlen; + hdr->value.begin = hdr->combined->str + nlen + 2; + hdr->value.len = vlen; - HASH_FIND (hh, msg->headers, hdr->name->begin, - hdr->name->len, found); + HASH_FIND (hh, msg->headers, hdr->name.begin, + hdr->name.len, found); if (found == NULL) { - HASH_ADD_KEYPTR (hh, msg->headers, hdr->name->begin, - hdr->name->len, hdr); + HASH_ADD_KEYPTR (hh, msg->headers, hdr->name.begin, + hdr->name.len, hdr); } DL_APPEND (found, hdr); @@ -2939,7 +2928,7 @@ rspamd_http_message_find_header (struct rspamd_http_message *msg, HASH_FIND (hh, msg->headers, name, slen, hdr); if (hdr) { - res = hdr->value; + res = &hdr->value; } } @@ -2963,7 +2952,7 @@ rspamd_http_message_find_header_multiple ( res = g_ptr_array_sized_new (4); LL_FOREACH (hdr, cur) { - g_ptr_array_add (res, cur->value); + g_ptr_array_add (res, &cur->value); } } } @@ -2990,8 +2979,6 @@ rspamd_http_message_remove_header (struct rspamd_http_message *msg, DL_FOREACH_SAFE (hdr, hcur, hcurtmp) { rspamd_fstring_free (hcur->combined); - g_slice_free1 (sizeof (*hcur->value), hcur->value); - g_slice_free1 (sizeof (*hcur->name), hcur->name); g_slice_free1 (sizeof (*hcur), hcur); } } diff --git a/src/libutil/http_private.h b/src/libutil/http_private.h index 1433e37e4..0e2658617 100644 --- a/src/libutil/http_private.h +++ b/src/libutil/http_private.h @@ -26,9 +26,9 @@ * HTTP header structure */ struct rspamd_http_header { - rspamd_ftok_t *name; - rspamd_ftok_t *value; rspamd_fstring_t *combined; + rspamd_ftok_t name; + rspamd_ftok_t value; UT_hash_handle hh; struct rspamd_http_header *prev, *next; }; diff --git a/src/lua/lua_http.c b/src/lua/lua_http.c index 103a0eb1d..bf3af6c56 100644 --- a/src/lua/lua_http.c +++ b/src/lua/lua_http.c @@ -208,9 +208,9 @@ lua_http_finish_handler (struct rspamd_http_connection *conn, /* * Lowercase header name, as Lua cannot search in caseless matter */ - rspamd_str_lc (h->combined->str, h->name->len); - lua_pushlstring (cbd->L, h->name->begin, h->name->len); - lua_pushlstring (cbd->L, h->value->begin, h->value->len); + rspamd_str_lc (h->combined->str, h->name.len); + lua_pushlstring (cbd->L, h->name.begin, h->name.len); + lua_pushlstring (cbd->L, h->value.begin, h->value.len); lua_settable (cbd->L, -3); }