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;

Reply via email to