diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-12-03 12:37:48 +0000 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2014-12-03 12:37:48 +0000 |
commit | ac4f36baa1657ebfd0ebe39ff691fa64fd3e5884 (patch) | |
tree | e6617d8582c3b278ad0f808c23430bd21513e214 | |
parent | 98c3c22dcd7d5bc6c4da9730e31006349ea90f82 (diff) | |
download | rspamd-ac4f36baa1657ebfd0ebe39ff691fa64fd3e5884.tar.gz rspamd-ac4f36baa1657ebfd0ebe39ff691fa64fd3e5884.zip |
Avoid descriptors leak in lua_http.
-rw-r--r-- | src/lua/lua_http.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/lua/lua_http.c b/src/lua/lua_http.c index 12b0072d3..1d5e3bcf8 100644 --- a/src/lua/lua_http.c +++ b/src/lua/lua_http.c @@ -45,6 +45,7 @@ struct lua_http_cbdata { struct event_base *ev_base; struct timeval tv; rspamd_inet_addr_t addr; + gint fd; gint cbref; }; @@ -77,6 +78,10 @@ lua_http_fin (gpointer arg) rspamd_http_message_free (cbd->msg); } + if (cbd->fd != -1) { + close (cbd->fd); + } + g_slice_free1 (sizeof (struct lua_http_cbdata), cbd); } @@ -151,6 +156,7 @@ lua_http_make_connection (struct lua_http_cbdata *cbd) msg_info ("cannot connect to %v", cbd->msg->host); return FALSE; } + cbd->fd = fd; cbd->conn = rspamd_http_connection_new (NULL, lua_http_error_handler, lua_http_finish_handler, RSPAMD_HTTP_CLIENT_SIMPLE, RSPAMD_HTTP_CLIENT); @@ -333,6 +339,7 @@ lua_http_request (lua_State *L) cbd->msg = msg; cbd->ev_base = ev_base; msec_to_tv (timeout, &cbd->tv); + cbd->fd = -1; if (session) { cbd->session = session; register_async_event (session, |