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;
/* 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:
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)) {
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 --;
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;
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,