summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenning Brauer <henning@cvs.openbsd.org>2004-01-03 14:06:36 +0000
committerHenning Brauer <henning@cvs.openbsd.org>2004-01-03 14:06:36 +0000
commit9a036d216a1cf77b21b0610eeff34251279dbafa (patch)
treef5f90f063bfb98fd964ce485e6b57238e9507266
parent6f7ff937aa150621fcaa178405ebd86a0a33bda6 (diff)
change imsg_read semantics so that the number of bytes read is returned.
that means that the callers can (and must) coope with closed connections themselves, what is exactly the desired behaviour.
-rw-r--r--usr.sbin/bgpd/bgpd.c9
-rw-r--r--usr.sbin/bgpd/control.c4
-rw-r--r--usr.sbin/bgpd/imsg.c10
-rw-r--r--usr.sbin/bgpd/rde.c7
-rw-r--r--usr.sbin/bgpd/session.c7
5 files changed, 22 insertions, 15 deletions
diff --git a/usr.sbin/bgpd/bgpd.c b/usr.sbin/bgpd/bgpd.c
index 916db012358..1b37de9ecb1 100644
--- a/usr.sbin/bgpd/bgpd.c
+++ b/usr.sbin/bgpd/bgpd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bgpd.c,v 1.49 2004/01/01 23:46:47 henning Exp $ */
+/* $OpenBSD: bgpd.c,v 1.50 2004/01/03 14:06:35 henning Exp $ */
/*
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -345,9 +345,14 @@ dispatch_imsg(struct imsgbuf *ibuf, int idx, struct mrt_config *conf)
int n;
in_addr_t ina;
- if (imsg_read(ibuf) == -1)
+ if ((n = imsg_read(ibuf)) == -1)
return (-1);
+ if (n == 0) { /* connection closed */
+ logit(LOG_CRIT, "dispatch_imsg in main: pipe closed");
+ return (-1);
+ }
+
for (;;) {
if ((n = imsg_get(ibuf, &imsg)) == -1)
return (-1);
diff --git a/usr.sbin/bgpd/control.c b/usr.sbin/bgpd/control.c
index 8dba7cffb4f..c201b20dc3c 100644
--- a/usr.sbin/bgpd/control.c
+++ b/usr.sbin/bgpd/control.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: control.c,v 1.5 2004/01/03 13:54:27 henning Exp $ */
+/* $OpenBSD: control.c,v 1.6 2004/01/03 14:06:35 henning Exp $ */
/*
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -179,7 +179,7 @@ control_dispatch_msg(struct pollfd *pfd, int i)
return (0);
}
- if (imsg_read(&c->ibuf) == -1) {
+ if (imsg_read(&c->ibuf) <= 0) {
control_close(pfd->fd);
return (1);
}
diff --git a/usr.sbin/bgpd/imsg.c b/usr.sbin/bgpd/imsg.c
index 1d2a8d4abab..a008c5dd00e 100644
--- a/usr.sbin/bgpd/imsg.c
+++ b/usr.sbin/bgpd/imsg.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: imsg.c,v 1.17 2004/01/01 23:46:47 henning Exp $ */
+/* $OpenBSD: imsg.c,v 1.18 2004/01/03 14:06:35 henning Exp $ */
/*
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -42,19 +42,15 @@ imsg_read(struct imsgbuf *ibuf)
if ((n = read(ibuf->sock, ibuf->r.buf + ibuf->r.wpos,
sizeof(ibuf->r.buf) - ibuf->r.wpos)) == -1) {
if (errno != EINTR && errno != EAGAIN) {
- log_err("imsg_get: pipe read error");
+ log_err("imsg_read: pipe read error");
return (-1);
}
return (0);
}
- if (n == 0) { /* connection closed */
- logit(LOG_CRIT, "imsg_get: pipe closed");
- return (-1);
- }
ibuf->r.wpos += n;
- return (0);
+ return (n);
}
int
diff --git a/usr.sbin/bgpd/rde.c b/usr.sbin/bgpd/rde.c
index 236589583be..7010c8177c5 100644
--- a/usr.sbin/bgpd/rde.c
+++ b/usr.sbin/bgpd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.40 2004/01/01 23:09:09 henning Exp $ */
+/* $OpenBSD: rde.c,v 1.41 2004/01/03 14:06:35 henning Exp $ */
/*
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -176,9 +176,12 @@ rde_dispatch_imsg(struct imsgbuf *ibuf, int idx)
u_int32_t rid;
int n;
- if (imsg_read(ibuf) == -1)
+ if ((n = imsg_read(ibuf)) == -1)
fatal("rde_dispatch_imsg: imsg_read error");
+ if (n == 0) /* connection closed */
+ fatal("rde_dispatch_imsg: pipe closed");
+
for (;;) {
if ((n = imsg_get(ibuf, &imsg)) == -1)
fatal("rde_dispatch_imsg: imsg_read error");
diff --git a/usr.sbin/bgpd/session.c b/usr.sbin/bgpd/session.c
index 6efc3ad2643..52e546334e9 100644
--- a/usr.sbin/bgpd/session.c
+++ b/usr.sbin/bgpd/session.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: session.c,v 1.54 2004/01/01 23:46:47 henning Exp $ */
+/* $OpenBSD: session.c,v 1.55 2004/01/03 14:06:35 henning Exp $ */
/*
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
@@ -1270,9 +1270,12 @@ session_dispatch_imsg(struct imsgbuf *ibuf, int idx)
enum reconf_action reconf;
int n;
- if (imsg_read(ibuf) == -1)
+ if ((n = imsg_read(ibuf)) == -1)
fatal("session_dispatch_imsg: imsg_read error");
+ if (n == 0) /* connection closed */
+ fatal("session_dispatch_imsg: pipe closed");
+
for (;;) {
if ((n = imsg_get(ibuf, &imsg)) == -1)
fatal("session_dispatch_imsg: imsg_get error");