From: Claudio Jeker Subject: bgpd: don't fatal when parent closes imsg socket To: tech@openbsd.org Date: Wed, 29 Oct 2025 16:04:41 +0100 The RTR and RDE process fatal when the parent closes the imsg connection. This is not ideal since that happens when one of the other processes dies and the parent exits. So this kind of hides the real reason further up in the log. The SE already does the right thing so just use that idiom and quit the main event loop ASAP and exit out. -- :wq Claudio Index: rde.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v diff -u -p -r1.658 rde.c --- rde.c 29 Oct 2025 10:34:23 -0000 1.658 +++ rde.c 29 Oct 2025 14:58:30 -0000 @@ -272,9 +272,11 @@ rde_main(int debug, int verbose) fatal("poll error"); } - if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1) - fatalx("Lost connection to parent"); - else + if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1) { + log_warnx("RDE: Lost connection to parent"); + rde_quit = 1; + continue; + } else rde_dispatch_imsg_parent(ibuf_main); if (handle_pollfd(&pfd[PFD_PIPE_SESSION], ibuf_se) == -1) { Index: rtr.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rtr.c,v diff -u -p -r1.31 rtr.c --- rtr.c 14 Apr 2025 14:50:29 -0000 1.31 +++ rtr.c 29 Oct 2025 14:58:30 -0000 @@ -264,9 +264,11 @@ rtr_main(int debug, int verbose) fatal("poll error"); } - if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1) - fatalx("Lost connection to parent"); - else + if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1) { + log_warnx("RTR: Lost connection to parent"); + rtr_quit = 1; + continue; + } else rtr_dispatch_imsg_parent(ibuf_main); if (handle_pollfd(&pfd[PFD_PIPE_RDE], ibuf_rde) == -1) {