Some time ago I busted mrt dumps. This fixes them again. Run the mrt rib_dump_r runner in the poll loop before checking for queued imsgs. This makes sure that data is produced and pushed out quickly. Only run the runner when the mrt state is not MRT_STATE_REMOVE (since that would restart the dump) and there are no queued messages.
-- :wq Claudio Index: rde.c =================================================================== RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v retrieving revision 1.433 diff -u -p -r1.433 rde.c --- rde.c 3 Oct 2018 11:36:39 -0000 1.433 +++ rde.c 12 Oct 2018 07:45:15 -0000 @@ -282,6 +281,11 @@ rde_main(int debug, int verbose) i = PFD_PIPE_COUNT; for (mctx = LIST_FIRST(&rde_mrts); mctx != 0; mctx = xmctx) { xmctx = LIST_NEXT(mctx, entry); + + if (mctx->mrt.state != MRT_STATE_REMOVE && + mctx->mrt.wbuf.queued == 0) + rib_dump_r(&mctx->ribctx); + if (mctx->mrt.wbuf.queued) { pfd[i].fd = mctx->mrt.wbuf.fd; pfd[i].events = POLLOUT;