summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ospfd/rde.c
diff options
context:
space:
mode:
authorkrw <krw@openbsd.org>2014-07-12 20:16:38 +0000
committerkrw <krw@openbsd.org>2014-07-12 20:16:38 +0000
commit1203692fe74ee36a401ce2981c6007c6158ae978 (patch)
tree3b379df73fd0f9e155ad47076e16b00604fd54dd /usr.sbin/ospfd/rde.c
parentProtect the freelists of transfer descriptors with the appropriate spl (diff)
downloadwireguard-openbsd-1203692fe74ee36a401ce2981c6007c6158ae978.tar.xz
wireguard-openbsd-1203692fe74ee36a401ce2981c6007c6158ae978.zip
Close connections when msgbuf_write() returns 0.
ok claudio@
Diffstat (limited to 'usr.sbin/ospfd/rde.c')
-rw-r--r--usr.sbin/ospfd/rde.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/usr.sbin/ospfd/rde.c b/usr.sbin/ospfd/rde.c
index 2441639b5b5..c1fa9f5e8c3 100644
--- a/usr.sbin/ospfd/rde.c
+++ b/usr.sbin/ospfd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.95 2013/11/13 20:43:00 benno Exp $ */
+/* $OpenBSD: rde.c,v 1.96 2014/07/12 20:16:38 krw Exp $ */
/*
* Copyright (c) 2004, 2005 Claudio Jeker <claudio@openbsd.org>
@@ -261,8 +261,10 @@ rde_dispatch_imsg(int fd, short event, void *bula)
shut = 1;
}
if (event & EV_WRITE) {
- if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
+ if ((n = msgbuf_write(&ibuf->w)) == -1 && errno != EAGAIN)
fatal("msgbuf_write");
+ if (n == 0) /* connection closed */
+ shut = 1;
}
clock_gettime(CLOCK_MONOTONIC, &tp);
@@ -624,8 +626,10 @@ rde_dispatch_parent(int fd, short event, void *bula)
shut = 1;
}
if (event & EV_WRITE) {
- if (msgbuf_write(&ibuf->w) == -1 && errno != EAGAIN)
+ if ((n = msgbuf_write(&ibuf->w)) == -1 && errno != EAGAIN)
fatal("msgbuf_write");
+ if (n == 0) /* connection closed */
+ shut = 1;
}
for (;;) {