diff options
author | renato <renato@openbsd.org> | 2016-09-02 15:33:27 +0000 |
---|---|---|
committer | renato <renato@openbsd.org> | 2016-09-02 15:33:27 +0000 |
commit | 132738f6d5fdc5b17d74f293389c069fdbe98c7b (patch) | |
tree | 08239f259f5ca41ff7f151a142dade781a461a37 /usr.sbin/dvmrpd | |
parent | Wording improvment from jmc@ long time ago. (diff) | |
download | wireguard-openbsd-132738f6d5fdc5b17d74f293389c069fdbe98c7b.tar.xz wireguard-openbsd-132738f6d5fdc5b17d74f293389c069fdbe98c7b.zip |
Don't fatal if the imsg pipe is closed, this is often triggered in the
parent and hides the real cause of the termination.
Pulled from ospfd. Original author: claudio@
ok rzalamena@ benno@ claudio@
Diffstat (limited to 'usr.sbin/dvmrpd')
-rw-r--r-- | usr.sbin/dvmrpd/dvmrpd.c | 25 | ||||
-rw-r--r-- | usr.sbin/dvmrpd/dvmrpe.c | 25 | ||||
-rw-r--r-- | usr.sbin/dvmrpd/rde.c | 14 |
3 files changed, 48 insertions, 16 deletions
diff --git a/usr.sbin/dvmrpd/dvmrpd.c b/usr.sbin/dvmrpd/dvmrpd.c index 2c173001453..5afd4eeb2a1 100644 --- a/usr.sbin/dvmrpd/dvmrpd.c +++ b/usr.sbin/dvmrpd/dvmrpd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dvmrpd.c,v 1.21 2016/02/02 17:51:11 sthen Exp $ */ +/* $OpenBSD: dvmrpd.c,v 1.22 2016/09/02 15:33:27 renato Exp $ */ /* * Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org> @@ -350,13 +350,13 @@ main_dispatch_dvmrpe(int fd, short event, void *bula) struct imsgbuf *ibuf = &iev->ibuf; struct imsg imsg; ssize_t n; - int verbose; + int shut = 0, verbose; if (event & EV_READ) { if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN) fatal("imsg_read error"); if (n == 0) /* connection closed */ - fatalx("pipe closed"); + shut = 1; } if (event & EV_WRITE) { if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN) @@ -393,7 +393,13 @@ main_dispatch_dvmrpe(int fd, short event, void *bula) } imsg_free(&imsg); } - imsg_event_add(iev); + if (!shut) + imsg_event_add(iev); + else { + /* this pipe is dead, so remove the event handler */ + event_del(&iev->ev); + event_loopexit(NULL); + } } void @@ -404,12 +410,13 @@ main_dispatch_rde(int fd, short event, void *bula) struct imsgbuf *ibuf = &iev->ibuf; struct imsg imsg; ssize_t n; + int shut = 0; if (event & EV_READ) { if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN) fatal("imsg_read error"); if (n == 0) /* connection closed */ - fatalx("pipe closed"); + shut = 1; } if (event & EV_WRITE) { if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN) @@ -447,7 +454,13 @@ main_dispatch_rde(int fd, short event, void *bula) } imsg_free(&imsg); } - imsg_event_add(iev); + if (!shut) + imsg_event_add(iev); + else { + /* this pipe is dead, so remove the event handler */ + event_del(&iev->ev); + event_loopexit(NULL); + } } void diff --git a/usr.sbin/dvmrpd/dvmrpe.c b/usr.sbin/dvmrpd/dvmrpe.c index 073fd993f86..0ee578e65b2 100644 --- a/usr.sbin/dvmrpd/dvmrpe.c +++ b/usr.sbin/dvmrpd/dvmrpe.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dvmrpe.c,v 1.15 2015/12/05 13:11:00 claudio Exp $ */ +/* $OpenBSD: dvmrpe.c,v 1.16 2016/09/02 15:33:27 renato Exp $ */ /* * Copyright (c) 2005 Claudio Jeker <claudio@openbsd.org> @@ -240,13 +240,13 @@ dvmrpe_dispatch_main(int fd, short event, void *bula) struct kif *kif; struct iface *iface; ssize_t n; - int link_ok; + int shut = 0, link_ok; if (event & EV_READ) { if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN) fatal("imsg_read error"); if (n == 0) /* connection closed */ - fatalx("pipe closed"); + shut = 1; } if (event & EV_WRITE) { if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN) @@ -292,7 +292,13 @@ dvmrpe_dispatch_main(int fd, short event, void *bula) } imsg_free(&imsg); } - imsg_event_add(iev); + if (!shut) + imsg_event_add(iev); + else { + /* this pipe is dead, so remove the event handler */ + event_del(&iev->ev); + event_loopexit(NULL); + } } void @@ -306,12 +312,13 @@ dvmrpe_dispatch_rde(int fd, short event, void *bula) struct iface *iface; struct route_report *rr; ssize_t n; + int shut = 0; if (event & EV_READ) { if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN) fatal("imsg_read error"); if (n == 0) /* connection closed */ - fatalx("pipe closed"); + shut = 1; } if (event & EV_WRITE) { if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN) @@ -438,7 +445,13 @@ dvmrpe_dispatch_rde(int fd, short event, void *bula) } imsg_free(&imsg); } - imsg_event_add(iev); + if (!shut) + imsg_event_add(iev); + else { + /* this pipe is dead, so remove the event handler */ + event_del(&iev->ev); + event_loopexit(NULL); + } } void diff --git a/usr.sbin/dvmrpd/rde.c b/usr.sbin/dvmrpd/rde.c index 6f65e96f034..609eb2b4374 100644 --- a/usr.sbin/dvmrpd/rde.c +++ b/usr.sbin/dvmrpd/rde.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.c,v 1.25 2015/12/05 13:11:00 claudio Exp $ */ +/* $OpenBSD: rde.c,v 1.26 2016/09/02 15:33:27 renato Exp $ */ /* * Copyright (c) 2004, 2005 Claudio Jeker <claudio@openbsd.org> @@ -198,7 +198,7 @@ rde_dispatch_imsg(int fd, short event, void *bula) struct imsg imsg; struct route_report rr; struct nbr_msg nm; - int i, connected = 0, verbose; + int i, connected = 0, shut = 0, verbose; ssize_t n; struct iface *iface; @@ -206,7 +206,7 @@ rde_dispatch_imsg(int fd, short event, void *bula) if ((n = imsg_read(ibuf)) == -1 && errno != EAGAIN) fatal("imsg_read error"); if (n == 0) /* connection closed */ - fatalx("pipe closed"); + shut = 1; } if (event & EV_WRITE) { if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN) @@ -325,7 +325,13 @@ rde_dispatch_imsg(int fd, short event, void *bula) } imsg_free(&imsg); } - imsg_event_add(iev); + if (!shut) + imsg_event_add(iev); + else { + /* this pipe is dead, so remove the event handler */ + event_del(&iev->ev); + event_loopexit(NULL); + } } int |