summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@rambler-co.ru>2011-03-14 16:59:43 +0300
committerVsevolod Stakhov <vsevolod@rambler-co.ru>2011-03-14 16:59:43 +0300
commitb37575ba0e7bcd1fe247529ea414a9dda93c50d8 (patch)
treed2e41e497a4b14ed1b0ca4a496a3ec73f9bc2ca9 /src
parent5ebb51418d61f8d69234ee9bb9e6f7ea8051b7b9 (diff)
downloadrspamd-b37575ba0e7bcd1fe247529ea414a9dda93c50d8.tar.gz
rspamd-b37575ba0e7bcd1fe247529ea414a9dda93c50d8.zip
Race in fuzzy check.
Diffstat (limited to 'src')
-rw-r--r--src/plugins/fuzzy_check.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/plugins/fuzzy_check.c b/src/plugins/fuzzy_check.c
index a8090be88..f2b11c8f4 100644
--- a/src/plugins/fuzzy_check.c
+++ b/src/plugins/fuzzy_check.c
@@ -442,12 +442,6 @@ fuzzy_io_fin (void *ud)
event_del (&session->ev);
close (session->fd);
- session->task->save.saved--;
- if (session->task->save.saved == 0) {
- /* Call other filters */
- session->task->save.saved = 1;
- process_filters (session->task);
- }
}
/* Call this whenever we got data from fuzzy storage */
@@ -521,6 +515,12 @@ fuzzy_io_callback (gint fd, short what, void *arg)
ok:
remove_normal_event (session->task->s, fuzzy_io_fin, session);
+ session->task->save.saved--;
+ if (session->task->save.saved == 0) {
+ /* Call other filters */
+ session->task->save.saved = 1;
+ process_filters (session->task);
+ }
}
static void
@@ -530,11 +530,6 @@ fuzzy_learn_fin (void *arg)
event_del (&session->ev);
close (session->fd);
- (*session->saved)--;
- if (*session->saved == 0) {
- session->session->state = STATE_REPLY;
- session->session->dispatcher->write_callback (session->session);
- }
}
static void
@@ -597,6 +592,12 @@ fuzzy_learn_callback (gint fd, short what, void *arg)
}
ok:
remove_normal_event (session->session->s, fuzzy_learn_fin, session);
+
+ (*session->saved)--;
+ if (*session->saved == 0) {
+ session->session->state = STATE_REPLY;
+ session->session->dispatcher->write_callback (session->session);
+ }
}
static inline void