summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Stapp <mjs.ietf@gmail.com>2025-02-04 11:18:07 -0500
committerGitHub <noreply@github.com>2025-02-04 11:18:07 -0500
commit704372bf4bb552bf011d4d9fa5dace874a49b0ed (patch)
treeb70495c793e4a7961fb93e3b9f5bb834abdecf01
parentf74fa9543bf66ec69c267099a4c3e045d58c94ba (diff)
parentc41155221e7fb7890fecc37f1685063dce6caaca (diff)
Merge pull request #17969 from donaldsharp/fpm_lost_sendsbase_10.3
zebra: Ensure dplane does not send work back to master at wrong time
-rw-r--r--zebra/zebra_dplane.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/zebra/zebra_dplane.c b/zebra/zebra_dplane.c
index b57c930154..9acdb4b2f8 100644
--- a/zebra/zebra_dplane.c
+++ b/zebra/zebra_dplane.c
@@ -7528,6 +7528,16 @@ static void dplane_thread_loop(struct event *event)
if (!zdplane_info.dg_run)
break;
+ /*
+ * The yield should only happen after a bit of work has been
+ * done but before we pull any new work off any provider
+ * queue to continue looping. This is a safe spot to
+ * do so.
+ */
+ if (event_should_yield(event)) {
+ reschedule = true;
+ break;
+ }
/* Locate next provider */
next_prov = dplane_prov_list_next(&zdplane_info.dg_providers,
prov);
@@ -7592,11 +7602,6 @@ static void dplane_thread_loop(struct event *event)
zlog_debug("dplane dequeues %d completed work from provider %s",
counter, dplane_provider_get_name(prov));
- if (event_should_yield(event)) {
- reschedule = true;
- break;
- }
-
/* Locate next provider */
prov = next_prov;
}