Browse Source

[Project] Avoid using of the worker pointer in srv handlers

tags/2.0
Vsevolod Stakhov 4 years ago
parent
commit
0844254be5
1 changed files with 13 additions and 10 deletions
  1. 13
    10
      src/libserver/rspamd_control.c

+ 13
- 10
src/libserver/rspamd_control.c View File

@@ -36,7 +36,8 @@ struct rspamd_control_reply_elt {
struct rspamd_control_reply reply;
struct rspamd_io_ev ev;
struct ev_loop *event_loop;
struct rspamd_worker *wrk;
GQuark wrk_type;
pid_t wrk_pid;
gpointer ud;
gint attached_fd;
struct rspamd_control_reply_elt *prev, *next;
@@ -193,15 +194,15 @@ rspamd_control_write_reply (struct rspamd_control_session *session)
/* Skip incompatible worker for fuzzy_stat */
if ((session->cmd.type == RSPAMD_CONTROL_FUZZY_STAT ||
session->cmd.type == RSPAMD_CONTROL_FUZZY_SYNC) &&
elt->wrk->type != g_quark_from_static_string ("fuzzy")) {
elt->wrk_type != g_quark_from_static_string ("fuzzy")) {
continue;
}

rspamd_snprintf (tmpbuf, sizeof (tmpbuf), "%P", elt->wrk->pid);
rspamd_snprintf (tmpbuf, sizeof (tmpbuf), "%P", elt->wrk_pid);
cur = ucl_object_typed_new (UCL_OBJECT);

ucl_object_insert_key (cur, ucl_object_fromstring (g_quark_to_string (
elt->wrk->type)), "type", 0, false);
elt->wrk_type)), "type", 0, false);

switch (session->cmd.type) {
case RSPAMD_CONTROL_STAT:
@@ -340,7 +341,7 @@ rspamd_control_wrk_io (gint fd, short what, gpointer ud)
r = recvmsg (fd, &msg, 0);
if (r == -1) {
msg_err ("cannot read reply from the worker %P (%s): %s",
elt->wrk->pid, g_quark_to_string (elt->wrk->type),
elt->wrk_pid, g_quark_to_string (elt->wrk_type),
strerror (errno));
}
else if (r >= (gssize)sizeof (elt->reply)) {
@@ -352,7 +353,7 @@ rspamd_control_wrk_io (gint fd, short what, gpointer ud)
else {
/* Timeout waiting */
msg_warn ("timeout waiting reply from %P (%s)",
elt->wrk->pid, g_quark_to_string (elt->wrk->type));
elt->wrk_pid, g_quark_to_string (elt->wrk_type));
}

session->replies_remain --;
@@ -384,9 +385,10 @@ rspamd_control_error_handler (struct rspamd_http_connection *conn, GError *err)

static struct rspamd_control_reply_elt *
rspamd_control_broadcast_cmd (struct rspamd_main *rspamd_main,
struct rspamd_control_command *cmd,
gint attached_fd,
void (*handler) (int, short, void *), gpointer ud)
struct rspamd_control_command *cmd,
gint attached_fd,
rspamd_ev_cb handler,
gpointer ud)
{
GHashTableIter it;
struct rspamd_worker *wrk;
@@ -430,7 +432,8 @@ rspamd_control_broadcast_cmd (struct rspamd_main *rspamd_main,

if (r == sizeof (*cmd)) {
rep_elt = g_malloc0 (sizeof (*rep_elt));
rep_elt->wrk = wrk;
rep_elt->wrk_pid = wrk->pid;
rep_elt->wrk_type = wrk->type;
rep_elt->event_loop = rspamd_main->event_loop;
rep_elt->ud = ud;
rspamd_ev_watcher_init (&rep_elt->ev,

Loading…
Cancel
Save