]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Implement forced timeout for delayed filters
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 26 Dec 2015 17:50:35 +0000 (17:50 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Sat, 26 Dec 2015 17:50:35 +0000 (17:50 +0000)
Issue: #452

src/libserver/events.c
src/libserver/events.h
src/worker.c

index d94149584c0c52d1e9ad96ed8635946c8ce1897a..45ca50ce470a53d6b8fefb0d4bbc0ded8acff429 100644 (file)
@@ -227,9 +227,7 @@ rspamd_session_destroy (struct rspamd_async_session *session)
        }
 
        session->flags |= RSPAMD_SESSION_FLAG_DESTROYING;
-       g_hash_table_foreach_remove (session->events,
-               rspamd_session_destroy_callback,
-               session);
+       rspamd_session_cleanup (session);
 
        if (session->cleanup != NULL) {
                session->cleanup (session->user_data);
@@ -238,6 +236,19 @@ rspamd_session_destroy (struct rspamd_async_session *session)
        return TRUE;
 }
 
+void
+rspamd_session_cleanup (struct rspamd_async_session *session)
+{
+       if (session == NULL) {
+               msg_info_session ("session is NULL");
+               return;
+       }
+
+       g_hash_table_foreach_remove (session->events,
+                       rspamd_session_destroy_callback,
+                       session);
+}
+
 gboolean
 rspamd_session_pending (struct rspamd_async_session *session)
 {
index 0126293973d7a04dc3ba15901fd9f38217598a36..cd748be0aebb9006ab0bd04b3d5a456cce1ef0d7 100644 (file)
@@ -75,6 +75,11 @@ void rspamd_session_remove_event (struct rspamd_async_session *session,
  */
 gboolean rspamd_session_destroy (struct rspamd_async_session *session);
 
+/**
+ * Try to remove all events pending
+ */
+void rspamd_session_cleanup (struct rspamd_async_session *session);
+
 /**
  * Check session for events pending and call fin callback if no events are pending
  * @param session session object
index 2598be415a5ff280d1d2ffcc5ccd49b3c51bf026..63cb778f456a602fec12390fcb33c03bb43f34ab 100644 (file)
@@ -129,7 +129,9 @@ rspamd_task_timeout (gint fd, short what, gpointer ud)
        if (!(task->processed_stages & RSPAMD_TASK_STAGE_FILTERS)) {
                msg_info_task ("processing of task timed out, forced processing");
                task->processed_stages |= RSPAMD_TASK_STAGE_FILTERS;
+               rspamd_session_cleanup (task->s);
                rspamd_task_process (task, RSPAMD_TASK_PROCESS_ALL);
+               rspamd_session_pending (task->s);
        }
 }