diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-03-10 18:25:09 +0300 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2011-03-10 18:25:09 +0300 |
commit | eda90216086cafa5c84f7a13f4d5bf72d4e225bd (patch) | |
tree | 84c75e0eda4dfa26209ab71d93165b19b6307283 /src/plugins/surbl.c | |
parent | aa959154787b080cdfa5efe09e5c927381d095a2 (diff) | |
download | rspamd-eda90216086cafa5c84f7a13f4d5bf72d4e225bd.tar.gz rspamd-eda90216086cafa5c84f7a13f4d5bf72d4e225bd.zip |
Fix race in surbl module.
Add more debugging to destructors in pools.
Diffstat (limited to 'src/plugins/surbl.c')
-rw-r--r-- | src/plugins/surbl.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/plugins/surbl.c b/src/plugins/surbl.c index 98ba5c9f0..d0b58b18a 100644 --- a/src/plugins/surbl.c +++ b/src/plugins/surbl.c @@ -825,8 +825,9 @@ redirector_callback (gint fd, short what, void *arg) r = rspamd_snprintf (url_buf, sizeof (url_buf), "GET %s HTTP/1.0\r\n\r\n", struri (param->url)); if (write (param->sock, url_buf, r) == -1) { msg_err ("write failed %s to %s", strerror (errno), param->redirector->name); - remove_normal_event (param->task->s, free_redirector_session, param); upstream_fail (¶m->redirector->up, param->task->tv.tv_sec); + remove_normal_event (param->task->s, free_redirector_session, param); + return; } param->state = STATE_READ; @@ -834,8 +835,9 @@ redirector_callback (gint fd, short what, void *arg) else { msg_info ("<%s> connection to redirector %s timed out while waiting for write", param->task->message_id, param->redirector->name); - remove_normal_event (param->task->s, free_redirector_session, param); upstream_fail (¶m->redirector->up, param->task->tv.tv_sec); + remove_normal_event (param->task->s, free_redirector_session, param); + return; } break; @@ -844,8 +846,9 @@ redirector_callback (gint fd, short what, void *arg) r = read (param->sock, url_buf, sizeof (url_buf) - 1); if (r <= 0) { msg_err ("read failed: %s from %s", strerror (errno), param->redirector->name); - remove_normal_event (param->task->s, free_redirector_session, param); upstream_fail (¶m->redirector->up, param->task->tv.tv_sec); + remove_normal_event (param->task->s, free_redirector_session, param); + return; } @@ -865,14 +868,14 @@ redirector_callback (gint fd, short what, void *arg) parse_uri (param->url, memory_pool_strdup (param->task->task_pool, c), param->task->task_pool); } } - remove_normal_event (param->task->s, free_redirector_session, param); upstream_ok (¶m->redirector->up, param->task->tv.tv_sec); + remove_normal_event (param->task->s, free_redirector_session, param); } else { msg_info ("<%s> reading redirector %s timed out, while waiting for read", param->redirector->name, param->task->message_id); - remove_normal_event (param->task->s, free_redirector_session, param); upstream_fail (¶m->redirector->up, param->task->tv.tv_sec); + remove_normal_event (param->task->s, free_redirector_session, param); } break; } |