so, msgbuf_write can now (again) return EAGAIN. some daemons have been
fixed/adopted, some not. I did a full audit of the tree for all
msgbuf_write users EAGAIN handling - this is the result.

Index: usr.sbin/dvmrpd/control.c
===================================================================
RCS file: /cvs/src/usr.sbin/dvmrpd/control.c,v
retrieving revision 1.17
diff -u -p -r1.17 control.c
--- usr.sbin/dvmrpd/control.c   11 Mar 2013 17:40:11 -0000      1.17
+++ usr.sbin/dvmrpd/control.c   20 Nov 2013 08:18:05 -0000
@@ -229,7 +229,7 @@ control_dispatch_imsg(int fd, short even
                }
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&c->iev.ibuf.w) == -1) {
+               if (msgbuf_write(&c->iev.ibuf.w) == -1 && errno != EAGAIN) {
                        control_close(fd);
                        return;
                }
Index: usr.sbin/dvmrpd/dvmrpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/dvmrpd/dvmrpd.c,v
retrieving revision 1.14
diff -u -p -r1.14 dvmrpd.c
--- usr.sbin/dvmrpd/dvmrpd.c    20 Aug 2011 19:02:28 -0000      1.14
+++ usr.sbin/dvmrpd/dvmrpd.c    20 Nov 2013 08:10:34 -0000
@@ -366,7 +366,7 @@ main_dispatch_dvmrpe(int fd, short event
                        fatalx("pipe closed");
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
@@ -419,7 +419,7 @@ main_dispatch_rde(int fd, short event, v
                        fatalx("pipe closed");
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
Index: usr.sbin/dvmrpd/dvmrpe.c
===================================================================
RCS file: /cvs/src/usr.sbin/dvmrpd/dvmrpe.c,v
retrieving revision 1.10
diff -u -p -r1.10 dvmrpe.c
--- usr.sbin/dvmrpd/dvmrpe.c    4 Jul 2011 04:34:14 -0000       1.10
+++ usr.sbin/dvmrpd/dvmrpe.c    20 Nov 2013 08:12:35 -0000
@@ -1,4 +1,4 @@
-/*     $OpenBSD: dvmrpe.c,v 1.9 2010/05/26 13:56:07 nicm Exp $ */
+/*     $OpenBSD: dvmrpe.c,v 1.10 2011/07/04 04:34:14 claudio Exp $ */
 
 /*
  * Copyright (c) 2005 Claudio Jeker <clau...@openbsd.org>
@@ -249,7 +249,7 @@ dvmrpe_dispatch_main(int fd, short event
                        fatalx("pipe closed");
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
@@ -314,7 +314,7 @@ dvmrpe_dispatch_rde(int fd, short event,
                        fatalx("pipe closed");
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
Index: usr.sbin/dvmrpd/rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/dvmrpd/rde.c,v
retrieving revision 1.22
diff -u -p -r1.22 rde.c
--- usr.sbin/dvmrpd/rde.c       2 Nov 2009 20:31:50 -0000       1.22
+++ usr.sbin/dvmrpd/rde.c       20 Nov 2013 08:12:57 -0000
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rde.c,v 1.21 2009/09/06 09:52:14 michele Exp $ */
+/*     $OpenBSD: rde.c,v 1.22 2009/11/02 20:31:50 claudio Exp $ */
 
 /*
  * Copyright (c) 2004, 2005 Claudio Jeker <clau...@openbsd.org>
@@ -209,7 +209,7 @@ rde_dispatch_imsg(int fd, short event, v
                        fatalx("pipe closed");
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
Index: usr.sbin/ldapd/imsgev.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/imsgev.c,v
retrieving revision 1.2
diff -u -p -r1.2 imsgev.c
--- usr.sbin/ldapd/imsgev.c     16 Jun 2012 00:08:32 -0000      1.2
+++ usr.sbin/ldapd/imsgev.c     20 Nov 2013 08:38:48 -0000
@@ -138,7 +138,7 @@ imsgev_dispatch(int fd, short ev, void *
                 * closed, or some error occured. Both case are not recoverable
                 * from the imsg perspective, so we treat it as a WRITE error.
                 */
-               if ((n = msgbuf_write(&ibuf->w)) != 1) {
+               if ((n = msgbuf_write(&ibuf->w)) != 1 && errno != EAGAIN) {
                        imsgev_disconnect(iev, IMSGEV_EWRITE);
                        return;
                }
Index: usr.sbin/ldpd/control.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldpd/control.c,v
retrieving revision 1.12
diff -u -p -r1.12 control.c
--- usr.sbin/ldpd/control.c     4 Jun 2013 02:25:28 -0000       1.12
+++ usr.sbin/ldpd/control.c     20 Nov 2013 08:16:39 -0000
@@ -209,7 +209,7 @@ control_dispatch_imsg(int fd, short even
                }
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&c->iev.ibuf.w) == -1) {
+               if (msgbuf_write(&c->iev.ibuf.w) == -1 && errno != EAGAIN) {
                        control_close(fd);
                        return;
                }
Index: usr.sbin/ldpd/lde.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldpd/lde.c,v
retrieving revision 1.27
diff -u -p -r1.27 lde.c
--- usr.sbin/ldpd/lde.c 15 Oct 2013 20:36:30 -0000      1.27
+++ usr.sbin/ldpd/lde.c 20 Nov 2013 08:31:33 -0000
@@ -211,7 +211,7 @@ lde_dispatch_imsg(int fd, short event, v
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
@@ -367,7 +367,7 @@ lde_dispatch_parent(int fd, short event,
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
Index: usr.sbin/ldpd/ldpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldpd/ldpd.c,v
retrieving revision 1.18
diff -u -p -r1.18 ldpd.c
--- usr.sbin/ldpd/ldpd.c        15 Oct 2013 20:21:25 -0000      1.18
+++ usr.sbin/ldpd/ldpd.c        20 Nov 2013 08:38:48 -0000
@@ -339,7 +339,7 @@ main_dispatch_ldpe(int fd, short event, 
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
@@ -415,7 +415,7 @@ main_dispatch_lde(int fd, short event, v
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
Index: usr.sbin/ldpd/ldpe.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldpd/ldpe.c,v
retrieving revision 1.22
diff -u -p -r1.22 ldpe.c
--- usr.sbin/ldpd/ldpe.c        17 Oct 2013 17:52:21 -0000      1.22
+++ usr.sbin/ldpd/ldpe.c        20 Nov 2013 08:32:21 -0000
@@ -330,7 +330,7 @@ ldpe_dispatch_main(int fd, short event, 
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("ldpe_dispatch_main: msgbuf_write");
        }
 
@@ -470,7 +470,7 @@ ldpe_dispatch_lde(int fd, short event, v
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("ldpe_dispatch_lde: msgbuf_write");
        }
 
Index: usr.sbin/ldpd/packet.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldpd/packet.c,v
retrieving revision 1.33
diff -u -p -r1.33 packet.c
--- usr.sbin/ldpd/packet.c      17 Oct 2013 17:47:05 -0000      1.33
+++ usr.sbin/ldpd/packet.c      20 Nov 2013 08:38:47 -0000
@@ -507,7 +507,7 @@ session_write(int fd, short event, void 
        struct nbr *nbr = tcp->nbr;
 
        if (event & EV_WRITE) {
-               if (msgbuf_write(&tcp->wbuf.wbuf) == -1) {
+               if (msgbuf_write(&tcp->wbuf.wbuf) == -1 && errno != EAGAIN) {
                        if (nbr)
                                nbr_fsm(nbr, NBR_EVT_CLOSE_SESSION);
                }
Index: usr.sbin/ripd/ripe.c
===================================================================
RCS file: /cvs/src/usr.sbin/ripd/ripe.c,v
retrieving revision 1.14
diff -u -p -r1.14 ripe.c
--- usr.sbin/ripd/ripe.c        4 Jul 2011 04:34:14 -0000       1.14
+++ usr.sbin/ripd/ripe.c        20 Nov 2013 08:38:47 -0000
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ripe.c,v 1.13 2010/05/26 13:56:08 nicm Exp $ */
+/*     $OpenBSD: ripe.c,v 1.14 2011/07/04 04:34:14 claudio Exp $ */
 
 /*
  * Copyright (c) 2006 Michele Marchetto <myde...@openbeer.it>
@@ -240,7 +240,7 @@ ripe_dispatch_main(int fd, short event, 
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
@@ -318,7 +318,7 @@ ripe_dispatch_rde(int fd, short event, v
                        shut = 1;
        }
        if (event & EV_WRITE) {
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
        }
 
Index: usr.sbin/smtpd/enqueue.c
===================================================================
RCS file: /cvs/src/usr.sbin/smtpd/enqueue.c,v
retrieving revision 1.69
diff -u -p -r1.69 enqueue.c
--- usr.sbin/smtpd/enqueue.c    25 Oct 2013 21:31:23 -0000      1.69
+++ usr.sbin/smtpd/enqueue.c    20 Nov 2013 08:38:46 -0000
@@ -705,7 +705,7 @@ open_connection(void)
        imsg_compose(ibuf, IMSG_SMTP_ENQUEUE_FD, IMSG_VERSION, 0, -1, NULL, 0);
 
        while (ibuf->w.queued)
-               if (msgbuf_write(&ibuf->w) < 0)
+               if (msgbuf_write(&ibuf->w) < 0 && errno != EAGAIN)
                        err(1, "write error");
 
        while (1) {
Index: usr.sbin/snmpd/control.c
===================================================================
RCS file: /cvs/src/usr.sbin/snmpd/control.c,v
retrieving revision 1.20
diff -u -p -r1.20 control.c
--- usr.sbin/snmpd/control.c    13 Nov 2013 20:45:19 -0000      1.20
+++ usr.sbin/snmpd/control.c    20 Nov 2013 08:59:10 -0000
@@ -252,8 +252,7 @@ control_dispatch_imsg(int fd, short even
                        control_close(fd, cs);
                        return;
                }
-               imsg_event_add(&c->iev);
-               return;
+               break;
        default:
                fatalx("unknown event");
        }
Index: usr.sbin/ypldap/ldapclient.c
===================================================================
RCS file: /cvs/src/usr.sbin/ypldap/ldapclient.c,v
retrieving revision 1.27
diff -u -p -r1.27 ldapclient.c
--- usr.sbin/ypldap/ldapclient.c        30 Apr 2013 05:14:59 -0000      1.27
+++ usr.sbin/ypldap/ldapclient.c        20 Nov 2013 08:38:43 -0000
@@ -174,7 +174,7 @@ client_dispatch_dns(int fd, short event,
                        shut = 1;
                break;
        case EV_WRITE:
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
                imsg_event_add(iev);
                return;
@@ -276,7 +276,7 @@ client_dispatch_parent(int fd, short eve
                        shut = 1;
                break;
        case EV_WRITE:
-               if (msgbuf_write(&ibuf->w) == -1)
+               if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
                        fatal("msgbuf_write");
                imsg_event_add(iev);
                return;

Reply via email to