diff options
| author | Mark Stapp <mjs.ietf@gmail.com> | 2025-02-04 11:18:07 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-04 11:18:07 -0500 | 
| commit | 704372bf4bb552bf011d4d9fa5dace874a49b0ed (patch) | |
| tree | b70495c793e4a7961fb93e3b9f5bb834abdecf01 | |
| parent | f74fa9543bf66ec69c267099a4c3e045d58c94ba (diff) | |
| parent | c41155221e7fb7890fecc37f1685063dce6caaca (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.c | 15 | 
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;  	}  | 
