return FALSE;
}
- if (session && rspamd_session_is_destroying (session)) {
+ if (session && rspamd_session_blocked (session)) {
return FALSE;
}
#define RSPAMD_SESSION_FLAG_WATCHING (1 << 0)
#define RSPAMD_SESSION_FLAG_DESTROYING (1 << 1)
+#define RSPAMD_SESSION_FLAG_CLEANUP (1 << 2)
#define RSPAMD_SESSION_IS_WATCHING(s) ((s)->flags & RSPAMD_SESSION_FLAG_WATCHING)
-#define RSPAMD_SESSION_IS_DESTROYING(s) ((s)->flags & RSPAMD_SESSION_FLAG_DESTROYING)
+#define RSPAMD_SESSION_CAN_ADD_EVENT(s) (!((s)->flags & (RSPAMD_SESSION_FLAG_DESTROYING|RSPAMD_SESSION_FLAG_CLEANUP)))
#define msg_err_session(...) rspamd_default_log_function(G_LOG_LEVEL_CRITICAL, \
"events", session->pool->tag.uid, \
g_assert_not_reached ();
}
- if (RSPAMD_SESSION_IS_DESTROYING (session)) {
- msg_debug_session ("skip adding event subsystem: %s: session is destroying",
+ if (!RSPAMD_SESSION_CAN_ADD_EVENT (session)) {
+ msg_debug_session ("skip adding event subsystem: %s: "
+ "session is destroying/cleaning",
g_quark_to_string (subsystem));
return NULL;
return FALSE;
}
- if (!(session->flags & RSPAMD_SESSION_FLAG_DESTROYING)) {
+ if (!rspamd_session_blocked (session)) {
session->flags |= RSPAMD_SESSION_FLAG_DESTROYING;
rspamd_session_cleanup (session);
return;
}
+ session->flags |= RSPAMD_SESSION_FLAG_CLEANUP;
+
kh_foreach_key (session->events, ev, {
/* Call event's finalizer */
msg_debug_session ("removed event on destroy: %p, subsystem: %s",
});
kh_clear (rspamd_events_hash, session->events);
+
+ session->flags &= ~RSPAMD_SESSION_FLAG_CLEANUP;
}
gboolean
}
gboolean
-rspamd_session_is_destroying (struct rspamd_async_session *session)
+rspamd_session_blocked (struct rspamd_async_session *session)
{
g_assert (session != NULL);
- return RSPAMD_SESSION_IS_DESTROYING (session);
+ return !RSPAMD_SESSION_CAN_ADD_EVENT (session);
}
\ No newline at end of file
* @param s
* @return
*/
-gboolean rspamd_session_is_destroying (struct rspamd_async_session *s);
+gboolean rspamd_session_blocked (struct rspamd_async_session *s);
#endif /* RSPAMD_EVENTS_H */
gint ret;
const gchar *learned_key = "learns";
- if (rspamd_session_is_destroying (task->s)) {
+ if (rspamd_session_blocked (task->s)) {
return FALSE;
}
goffset off;
const gchar *learned_key = "learns";
- if (rspamd_session_is_destroying (task->s)) {
+ if (rspamd_session_blocked (task->s)) {
return FALSE;
}
struct timeval tv;
gchar *h;
- if (rspamd_session_is_destroying (task->s)) {
+ if (rspamd_session_blocked (task->s)) {
return RSPAMD_LEARN_INGORE;
}
gchar *h;
gint flag;
- if (rspamd_session_is_destroying (task->s)) {
+ if (rspamd_session_blocked (task->s)) {
return RSPAMD_LEARN_INGORE;
}
return 1;
}
- if (session && rspamd_session_is_destroying (session)) {
+ if (session && rspamd_session_blocked (session)) {
lua_pushboolean (L, FALSE);
return 1;
lua_pop (L, 1); /* table */
- if (session && rspamd_session_is_destroying (session)) {
+ if (session && rspamd_session_blocked (session)) {
ret = FALSE;
}
LL_PREPEND (sp_ud->c->specific, sp_ud);
- if (ud->s && rspamd_session_is_destroying (ud->s)) {
+ if (ud->s && rspamd_session_blocked (ud->s)) {
lua_pushboolean (L, 0);
lua_pushstring (L, "session is terminating");
if (session) {
cbd->session = session;
- if (rspamd_session_is_destroying (session)) {
+ if (rspamd_session_blocked (session)) {
TCP_RELEASE (cbd);
lua_pushboolean (L, FALSE);
if (session) {
cbd->session = session;
- if (rspamd_session_is_destroying (session)) {
+ if (rspamd_session_blocked (session)) {
TCP_RELEASE (cbd);
lua_pushboolean (L, FALSE);
lua_pushliteral (L, "Session is being destroyed, requests are not allowed");
rspamd_inet_addr_t *addr;
gint sock;
- if (!rspamd_session_is_destroying (task->s)) {
+ if (!rspamd_session_blocked (task->s)) {
/* Get upstream */
selected = rspamd_upstream_get (rule->servers, RSPAMD_UPSTREAM_ROUND_ROBIN,
NULL, 0);
gint ret = -1;
/* Get upstream */
- if (!rspamd_session_is_destroying (task->s)) {
+ if (!rspamd_session_blocked (task->s)) {
while ((selected = rspamd_upstream_get (rule->servers,
RSPAMD_UPSTREAM_SEQUENTIAL, NULL, 0))) {
/* Create UDP socket */
struct rspamd_http_message *msg;
struct surbl_ctx *surbl_module_ctx = surbl_get_context (task->cfg);
- if (!rspamd_session_is_destroying (task->s)) {
+ if (!rspamd_session_blocked (task->s)) {
selected = rspamd_upstream_get (surbl_module_ctx->redirectors,
RSPAMD_UPSTREAM_ROUND_ROBIN, url->host, url->hostlen);