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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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;