aboutsummaryrefslogtreecommitdiffstats
path: root/src/libutil
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2018-06-12 11:59:10 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2018-06-12 11:59:10 +0100
commitb49e6ceb5c3ad19575bb692702598b544f2292bb (patch)
treef5d4f89b277373c91a8eb0a82f409ddc13a4e3f6 /src/libutil
parent43cad9b9ee5dab8dda2058cd4b6b4140699ce614 (diff)
downloadrspamd-b49e6ceb5c3ad19575bb692702598b544f2292bb.tar.gz
rspamd-b49e6ceb5c3ad19575bb692702598b544f2292bb.zip
[Fix] Fix potential race condition for a finished HTTP connections
Diffstat (limited to 'src/libutil')
-rw-r--r--src/libutil/http.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/libutil/http.c b/src/libutil/http.c
index 03dbaa7bd..315598871 100644
--- a/src/libutil/http.c
+++ b/src/libutil/http.c
@@ -1183,7 +1183,13 @@ rspamd_http_event_handler (int fd, short what, gpointer ud)
http_errno_description (priv->parser.http_errno));
}
- conn->error_handler (conn, err);
+ if (!conn->finished) {
+ conn->error_handler (conn, err);
+ }
+ else {
+ msg_err ("got error after HTTP request is finished: %e", err);
+ }
+
g_error_free (err);
REF_RELEASE (pbuf);
@@ -1234,7 +1240,14 @@ rspamd_http_event_handler (int fd, short what, gpointer ud)
err = g_error_new (HTTP_ERROR, priv->parser.http_errno,
"HTTP parser error: %s",
http_errno_description (priv->parser.http_errno));
- conn->error_handler (conn, err);
+
+ if (!conn->finished) {
+ conn->error_handler (conn, err);
+ }
+ else {
+ msg_err ("got error after HTTP request is finished: %e", err);
+ }
+
g_error_free (err);
REF_RELEASE (pbuf);