From 7fd590aabff817d200a3946872c8d0938e55814f Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Tue, 14 Jun 2016 10:14:56 +0100 Subject: [PATCH] [Fix] More fixes to events logic --- src/libutil/ssl_util.c | 22 ++++++++++++++++++++++ src/lua/lua_map.c | 8 ++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/libutil/ssl_util.c b/src/libutil/ssl_util.c index a72f1de95..55d5a1ad4 100644 --- a/src/libutil/ssl_util.c +++ b/src/libutil/ssl_util.c @@ -382,6 +382,7 @@ rspamd_ssl_event_handler (gint fd, short what, gpointer ud) return; } + event_del (c->ev); event_set (c->ev, fd, what, rspamd_ssl_event_handler, c); event_base_set (c->ev_base, c->ev); event_add (c->ev, c->tv); @@ -389,12 +390,22 @@ rspamd_ssl_event_handler (gint fd, short what, gpointer ud) break; case ssl_next_read: event_del (c->ev); + /* Restore handler */ + event_set (c->ev, c->fd, EV_READ|EV_PERSIST, + c->handler, c->handler_data); + event_base_set (c->ev_base, c->ev); + event_add (c->ev, c->tv); c->state = ssl_conn_connected; c->handler (fd, EV_READ, c->handler_data); break; case ssl_next_write: case ssl_conn_connected: event_del (c->ev); + /* Restore handler */ + event_set (c->ev, c->fd, EV_WRITE, + c->handler, c->handler_data); + event_base_set (c->ev_base, c->ev); + event_add (c->ev, c->tv); c->state = ssl_conn_connected; c->handler (fd, EV_WRITE, c->handler_data); break; @@ -459,6 +470,11 @@ rspamd_ssl_connect_fd (struct rspamd_ssl_connection *conn, gint fd, if (ret == 1) { conn->state = ssl_conn_connected; + + if (event_get_base (ev)) { + event_del (ev); + } + event_set (ev, fd, EV_WRITE, rspamd_ssl_event_handler, conn); if (conn->ev_base) { @@ -480,6 +496,10 @@ rspamd_ssl_connect_fd (struct rspamd_ssl_connection *conn, gint fd, return FALSE; } + if (event_get_base (ev)) { + event_del (ev); + } + event_set (ev, fd, what, rspamd_ssl_event_handler, conn); event_base_set (conn->ev_base, ev); event_add (ev, tv); @@ -546,6 +566,7 @@ rspamd_ssl_read (struct rspamd_ssl_connection *conn, gpointer buf, return -1; } + event_del (conn->ev); event_set (conn->ev, conn->fd, what, rspamd_ssl_event_handler, conn); event_base_set (conn->ev_base, conn->ev); event_add (conn->ev, conn->tv); @@ -615,6 +636,7 @@ rspamd_ssl_write (struct rspamd_ssl_connection *conn, gconstpointer buf, return -1; } + event_del (conn->ev); event_set (conn->ev, conn->fd, what, rspamd_ssl_event_handler, conn); event_base_set (conn->ev_base, conn->ev); event_add (conn->ev, conn->tv); diff --git a/src/lua/lua_map.c b/src/lua/lua_map.c index cf2b29f04..570287c13 100644 --- a/src/lua/lua_map.c +++ b/src/lua/lua_map.c @@ -309,10 +309,6 @@ lua_map_fin (struct map_cb_data *data) map = data->map; - if (data->prev_data) { - data->prev_data = NULL; - } - if (data->cur_data) { cbdata = (struct lua_map_callback_data *)data->cur_data; } @@ -321,6 +317,10 @@ lua_map_fin (struct map_cb_data *data) return; } + if (data->prev_data) { + data->prev_data = NULL; + } + if (cbdata->ref == -1) { msg_err_map ("map has no callback set"); } -- 2.39.5