return new_event;
}
+void rspamd_session_event_update_label(struct rspamd_async_event *ev,
+ const char *label)
+{
+ if (ev != NULL) {
+ ev->label = label;
+ }
+}
+
void rspamd_session_remove_event(struct rspamd_async_session *session,
event_finalizer_t fin,
void *ud)
#define rspamd_session_add_event(session, fin, user_data, subsystem) \
rspamd_session_add_event_full(session, fin, user_data, subsystem, NULL)
+/**
+ * Updates the label (human annotation) of an already-registered event.
+ * Intended for callers whose event is long-lived (e.g. a TCP connection)
+ * and whose "current operation" (read / write / connect) changes during
+ * the event's lifetime. The new label must remain valid until the event
+ * is removed or the label is updated again.
+ * @param ev event returned by rspamd_session_add_event[_full]; may be NULL (no-op)
+ * @param label new label or NULL to clear
+ */
+void rspamd_session_event_update_label(struct rspamd_async_event *ev,
+ const char *label);
+
/**
* Remove normal event
* @param session session object
if (session) {
if (req != NULL) {
- rspamd_session_add_event(session,
- (event_finalizer_t) rspamd_dns_fin_cb,
- reqdata,
- M);
+ rspamd_session_add_event_full(session,
+ (event_finalizer_t) rspamd_dns_fin_cb,
+ reqdata,
+ M,
+ rdns_strtype(type));
}
}
}
else {
if (hdl->type == LUA_WANT_READ) {
+ rspamd_session_event_update_label(cbd->async_ev, "tcp read");
/* We need to check if we have some leftover in the buffer */
if (cbd->in->len > 0) {
}
}
else if (hdl->type == LUA_WANT_WRITE) {
+ rspamd_session_event_update_label(cbd->async_ev, "tcp write");
/*
* We need to plan write event if there is something in the
* write request
}
}
else { /* LUA_WANT_CONNECT */
+ rspamd_session_event_update_label(cbd->async_ev, "tcp connect");
msg_debug_tcp("plan new connect");
rspamd_ev_watcher_reschedule(cbd->event_loop, &cbd->ev,
EV_WRITE);