From: Vsevolod Stakhov Date: Thu, 14 Jan 2016 23:51:24 +0000 (+0000) Subject: Remove events when 0 or error are returned X-Git-Tag: 1.1.0~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d250e7c04ccafe9090d34298ede98c4a7511aba4;p=thirdparty%2Frspamd.git Remove events when 0 or error are returned --- diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c index 6f0bd8a4dd..e274f100b2 100644 --- a/src/libserver/rspamd_control.c +++ b/src/libserver/rspamd_control.c @@ -548,16 +548,25 @@ rspamd_control_default_worker_handler (gint fd, short what, gpointer ud) gssize r; - r = read (fd, &cmd, sizeof (cmd)); if (r == -1) { msg_err ("cannot read request from the control socket: %s", strerror (errno)); + + if (errno != EAGAIN && errno != EINTR) { + event_del (&cd->io_ev); + close (fd); + } } else if (r < (gint)sizeof (cmd)) { msg_err ("short read of control command: %d of %d", (gint)r, (gint)sizeof (cmd)); + + if (r == 0) { + event_del (&cd->io_ev); + close (fd); + } } else if ((gint)cmd.type >= 0 && cmd.type < RSPAMD_CONTROL_MAX) {