diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-07-18 17:50:39 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-07-18 17:51:26 +0100 |
commit | c2d4fc63c8c7834570c855bc7547f3437c6af6b1 (patch) | |
tree | 781ce9d5998a0aff4caafe688a9e0b7d4682248a /src/libutil/http.c | |
parent | a657aaf79e628e5c736f99c52f219ef2d5a40f6e (diff) | |
download | rspamd-c2d4fc63c8c7834570c855bc7547f3437c6af6b1.tar.gz rspamd-c2d4fc63c8c7834570c855bc7547f3437c6af6b1.zip |
[Feature] Implement refcount for messages
Diffstat (limited to 'src/libutil/http.c')
-rw-r--r-- | src/libutil/http.c | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/src/libutil/http.c b/src/libutil/http.c index f2d1675c4..7aabba296 100644 --- a/src/libutil/http.c +++ b/src/libutil/http.c @@ -1243,7 +1243,7 @@ rspamd_http_connection_reset (struct rspamd_http_connection *conn) priv->peer_key = msg->peer_key; msg->peer_key = NULL; } - rspamd_http_message_free (msg); + rspamd_http_message_unref (msg); priv->msg = NULL; } @@ -1290,19 +1290,15 @@ rspamd_http_connection_steal_msg (struct rspamd_http_connection *conn) } struct rspamd_http_message * -rspamd_http_connection_copy_msg (struct rspamd_http_connection *conn) +rspamd_http_connection_copy_msg (struct rspamd_http_message *msg) { - struct rspamd_http_connection_private *priv; - struct rspamd_http_message *new_msg, *msg; + struct rspamd_http_message *new_msg; struct rspamd_http_header *hdr, *nhdr, *thdr; const gchar *old_body; gsize old_len; struct stat st; union _rspamd_storage_u *storage; - priv = conn->priv; - msg = priv->msg; - new_msg = rspamd_http_new_message (msg->type); new_msg->flags = msg->flags; @@ -1316,12 +1312,12 @@ rspamd_http_connection_copy_msg (struct rspamd_http_connection *conn) storage->shared.shm_fd = dup (msg->body_buf.c.shared.shm_fd); if (storage->shared.shm_fd == -1) { - rspamd_http_message_free (new_msg); + rspamd_http_message_unref (new_msg); return NULL; } if (fstat (storage->shared.shm_fd, &st) == -1) { - rspamd_http_message_free (new_msg); + rspamd_http_message_unref (new_msg); return NULL; } @@ -1337,7 +1333,7 @@ rspamd_http_connection_copy_msg (struct rspamd_http_connection *conn) storage->shared.shm_fd, 0); if (new_msg->body_buf.str == MAP_FAILED) { - rspamd_http_message_free (new_msg); + rspamd_http_message_unref (new_msg); return NULL; } @@ -1350,7 +1346,7 @@ rspamd_http_connection_copy_msg (struct rspamd_http_connection *conn) old_body = rspamd_http_message_get_body (msg, &old_len); if (!rspamd_http_message_set_body (new_msg, old_body, old_len)) { - rspamd_http_message_free (new_msg); + rspamd_http_message_unref (new_msg); return NULL; } } @@ -2120,6 +2116,8 @@ rspamd_http_new_message (enum http_parser_type type) new->type = type; new->method = HTTP_GET; + REF_INIT_RETAIN (new, rspamd_http_message_free); + return new; } @@ -2184,6 +2182,8 @@ rspamd_http_message_from_url (const gchar *url) msg->host = rspamd_fstring_new_init (host, pu.field_data[UF_HOST].len); msg->url = rspamd_fstring_append (msg->url, path, pathlen); + REF_INIT_RETAIN (msg, rspamd_http_message_free); + return msg; } @@ -3166,3 +3166,17 @@ rspamd_http_date_format (gchar *buf, gsize len, time_t time) http_month[tms.tm_mon], tms.tm_year + 1900, tms.tm_hour, tms.tm_min, tms.tm_sec); } + +struct rspamd_http_message * +rspamd_http_message_ref (struct rspamd_http_message *msg) +{ + REF_RETAIN (msg); + + return msg; +} + +void +rspamd_http_message_unref (struct rspamd_http_message *msg) +{ + REF_RELEASE (msg); +} |