Skip to content

Commit

Permalink
zebra: Ensure dplane does not send work back to master at wrong time
Browse files Browse the repository at this point in the history
When looping through the dplane providers, the worklist was
being populated with items from the last provider and then
the event system was checked to see if we should stop processing.
If the event system says `yes` then the dplane code would stop
and send the worklist to the master zebra pthread for collection.
This obviously skipped the next dplane provider on the list
which is double plus not good.

Signed-off-by: Donald Sharp <[email protected]>
  • Loading branch information
donaldsharp committed Jan 31, 2025
1 parent 07a803a commit 64709ec
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions zebra/zebra_dplane.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 64709ec

Please sign in to comment.