diff --git a/src/slurmctld/fed_mgr.c b/src/slurmctld/fed_mgr.c index e18d1052f7f38e8bd7307888fcdbd152298acb59..33eb80f9eff30755d534961169f35a79d815d614 100644 --- a/src/slurmctld/fed_mgr.c +++ b/src/slurmctld/fed_mgr.c @@ -63,6 +63,7 @@ static pthread_t ping_thread = 0; static bool stop_pinging = false, inited = false; static pthread_mutex_t open_send_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t init_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t update_mutex = PTHREAD_MUTEX_INITIALIZER; static int _close_controller_conn(slurmdb_cluster_rec_t *cluster) { @@ -576,7 +577,8 @@ extern int fed_mgr_update_feds(slurmdb_update_object_t *update) * all will get set up later. */ } slurm_mutex_unlock(&init_mutex); - + /* we only want one update happening at a time. */ + slurm_mutex_lock(&update_mutex); if (slurmctld_conf.debug_flags & DEBUG_FLAG_FEDR) info("Got a federation update"); @@ -608,7 +610,7 @@ extern int fed_mgr_update_feds(slurmdb_update_object_t *update) _leave_federation(); unlock_slurmctld(fed_write_lock); } - + slurm_mutex_unlock(&update_mutex); return SLURM_SUCCESS; }