Browse Source

[Fix] More fixes to events logic

tags/1.3.0
Vsevolod Stakhov 8 years ago
parent
commit
7fd590aabf
2 changed files with 26 additions and 4 deletions
  1. 22
    0
      src/libutil/ssl_util.c
  2. 4
    4
      src/lua/lua_map.c

+ 22
- 0
src/libutil/ssl_util.c View 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);

+ 4
- 4
src/lua/lua_map.c View 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");
}

Loading…
Cancel
Save