]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
Handle srv protocol timeouts in a specific way
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 22 Feb 2016 14:41:49 +0000 (14:41 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 22 Feb 2016 14:41:49 +0000 (14:41 +0000)
src/libserver/rspamd_control.c

index b24be095468d8d11307ddbe19b5de1fc147bd48d..138809a84c09556cde2b3eec5451f3d5b157eec7 100644 (file)
@@ -321,23 +321,31 @@ rspamd_control_wrk_io (gint fd, short what, gpointer ud)
        session = elt->ud;
        elt->attached_fd = -1;
 
-       iov.iov_base = &elt->reply;
-       iov.iov_len = sizeof (elt->reply);
-       memset (&msg, 0, sizeof (msg));
-       msg.msg_control = fdspace;
-       msg.msg_controllen = sizeof (fdspace);
-       msg.msg_iov = &iov;
-       msg.msg_iovlen = 1;
-
-       r = recvmsg (fd, &msg, 0);
-       if (r == -1) {
-               msg_err ("cannot read request from the worker %P (%s): %s",
-                               elt->wrk->pid, g_quark_to_string (elt->wrk->type), strerror (errno));
-       }
-       else if (r >= (gssize)sizeof (elt->reply)) {
-               if (msg.msg_controllen >= CMSG_SPACE(sizeof (int))) {
-                       elt->attached_fd = *(int *) CMSG_DATA(CMSG_FIRSTHDR (&msg));
+       if (what == EV_READ) {
+               iov.iov_base = &elt->reply;
+               iov.iov_len = sizeof (elt->reply);
+               memset (&msg, 0, sizeof (msg));
+               msg.msg_control = fdspace;
+               msg.msg_controllen = sizeof (fdspace);
+               msg.msg_iov = &iov;
+               msg.msg_iovlen = 1;
+
+               r = recvmsg (fd, &msg, 0);
+               if (r == -1) {
+                       msg_err ("cannot read reply from the worker %P (%s): %s",
+                                       elt->wrk->pid, g_quark_to_string (elt->wrk->type),
+                                       strerror (errno));
                }
+               else if (r >= (gssize)sizeof (elt->reply)) {
+                       if (msg.msg_controllen >= CMSG_SPACE(sizeof (int))) {
+                               elt->attached_fd = *(int *) CMSG_DATA(CMSG_FIRSTHDR (&msg));
+                       }
+               }
+       }
+       else {
+               /* Timeout waiting */
+               msg_warn ("timeout waiting reply from %P (%s)",
+                               elt->wrk->pid, g_quark_to_string (elt->wrk->type));
        }
 
        session->replies_remain --;