From 28a656a2625424cc0316ba2ace645e32a7ed0086 Mon Sep 17 00:00:00 2001 From: Claudio Jeker Date: Tue, 24 Jan 2006 14:26:53 +0000 Subject: Functions in the poll() loop should only be moved around if there are no side-effects. Revert last changes and make bgpctl reload work again. --- usr.sbin/bgpd/bgpd.c | 61 +++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/usr.sbin/bgpd/bgpd.c b/usr.sbin/bgpd/bgpd.c index 267511dce32..f6856b263f6 100644 --- a/usr.sbin/bgpd/bgpd.c +++ b/usr.sbin/bgpd/bgpd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: bgpd.c,v 1.131 2006/01/24 10:05:24 henning Exp $ */ +/* $OpenBSD: bgpd.c,v 1.132 2006/01/24 14:26:52 claudio Exp $ */ /* * Copyright (c) 2003, 2004 Henning Brauer @@ -278,58 +278,55 @@ main(int argc, char *argv[]) quit = 1; } - if (reconfig) { - reconfig = 0; - log_info("rereading config"); - reconfigure(conffile, &conf, &mrt_l, &peer_l, rules_l); - } - - if (sigchld) { - sigchld = 0; - if (check_child(io_pid, "session engine")) { - quit = 1; - io_pid = 0; - } - if (check_child(rde_pid, "route decision engine")) { - quit = 1; - rde_pid = 0; - } - } - - if (mrtdump == 1) { - mrtdump = 0; - mrt_handler(&mrt_l); - } - - if (nfds == -1 || nfds == 0) - continue; - - if (pfd[PFD_PIPE_SESSION].revents & POLLOUT) + if (nfds > 0 && pfd[PFD_PIPE_SESSION].revents & POLLOUT) if (msgbuf_write(&ibuf_se->w) < 0) { log_warn("pipe write error (to SE)"); quit = 1; } - if (pfd[PFD_PIPE_ROUTE].revents & POLLOUT) + if (nfds > 0 && pfd[PFD_PIPE_ROUTE].revents & POLLOUT) if (msgbuf_write(&ibuf_rde->w) < 0) { log_warn("pipe write error (to RDE)"); quit = 1; } - if (pfd[PFD_PIPE_SESSION].revents & POLLIN) { + if (nfds > 0 && pfd[PFD_PIPE_SESSION].revents & POLLIN) { if (dispatch_imsg(ibuf_se, PFD_PIPE_SESSION) == -1) quit = 1; } - if (pfd[PFD_PIPE_ROUTE].revents & POLLIN) { + if (nfds > 0 && pfd[PFD_PIPE_ROUTE].revents & POLLIN) { if (dispatch_imsg(ibuf_rde, PFD_PIPE_ROUTE) == -1) quit = 1; } - if (pfd[PFD_SOCK_ROUTE].revents & POLLIN) { + if (nfds > 0 && pfd[PFD_SOCK_ROUTE].revents & POLLIN) { if (kr_dispatch_msg() == -1) quit = 1; } + + if (reconfig) { + reconfig = 0; + log_info("rereading config"); + reconfigure(conffile, &conf, &mrt_l, &peer_l, rules_l); + } + + if (sigchld) { + sigchld = 0; + if (check_child(io_pid, "session engine")) { + quit = 1; + io_pid = 0; + } + if (check_child(rde_pid, "route decision engine")) { + quit = 1; + rde_pid = 0; + } + } + + if (mrtdump) { + mrtdump = 0; + mrt_handler(&mrt_l); + } } signal(SIGCHLD, SIG_IGN); -- cgit v1.2.3