]> source.dussan.org Git - rspamd.git/commitdiff
[Fix] More fixes to events logic
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 14 Jun 2016 09:14:56 +0000 (10:14 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Tue, 14 Jun 2016 09:14:56 +0000 (10:14 +0100)
src/libutil/ssl_util.c
src/lua/lua_map.c

index a72f1de955bada79b5deb1dabca4b99f19176919..55d5a1ad412881cc612247c781111948cae3595f 100644 (file)
@@ -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);
index cf2b29f04032a88ba4e16fa7735f0faa6c3addec..570287c1327fcedef0171968b35c2ba59a637e9a 100644 (file)
@@ -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");
        }