From b6f08418285b59d648d72ffe4c1c83558bbe183f Mon Sep 17 00:00:00 2001 From: Tim Wickberg <tim@schedmd.com> Date: Mon, 13 Mar 2017 07:43:55 +0300 Subject: [PATCH] Simplify code now that try_lock_slurmctld() is gone. --- src/slurmctld/locks.c | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/src/slurmctld/locks.c b/src/slurmctld/locks.c index 6ac05b9a81d..69bcef97f9c 100644 --- a/src/slurmctld/locks.c +++ b/src/slurmctld/locks.c @@ -52,9 +52,9 @@ static pthread_mutex_t state_mutex = PTHREAD_MUTEX_INITIALIZER; static slurmctld_lock_flags_t slurmctld_locks; static int kill_thread = 0; -static bool _wr_rdlock(lock_datatype_t datatype, bool wait_lock); +static void _wr_rdlock(lock_datatype_t datatype); static void _wr_rdunlock(lock_datatype_t datatype); -static bool _wr_wrlock(lock_datatype_t datatype, bool wait_lock); +static void _wr_wrlock(lock_datatype_t datatype); static void _wr_wrunlock(lock_datatype_t datatype); /* init_locks - create locks used for slurmctld data structure access @@ -69,29 +69,29 @@ void init_locks(void) extern void lock_slurmctld(slurmctld_lock_t lock_levels) { if (lock_levels.config == READ_LOCK) - (void) _wr_rdlock(CONFIG_LOCK, true); + _wr_rdlock(CONFIG_LOCK); else if (lock_levels.config == WRITE_LOCK) - (void) _wr_wrlock(CONFIG_LOCK, true); + _wr_wrlock(CONFIG_LOCK); if (lock_levels.job == READ_LOCK) - (void) _wr_rdlock(JOB_LOCK, true); + _wr_rdlock(JOB_LOCK); else if (lock_levels.job == WRITE_LOCK) - (void) _wr_wrlock(JOB_LOCK, true); + _wr_wrlock(JOB_LOCK); if (lock_levels.node == READ_LOCK) - (void) _wr_rdlock(NODE_LOCK, true); + _wr_rdlock(NODE_LOCK); else if (lock_levels.node == WRITE_LOCK) - (void) _wr_wrlock(NODE_LOCK, true); + _wr_wrlock(NODE_LOCK); if (lock_levels.partition == READ_LOCK) - (void) _wr_rdlock(PART_LOCK, true); + _wr_rdlock(PART_LOCK); else if (lock_levels.partition == WRITE_LOCK) - (void) _wr_wrlock(PART_LOCK, true); + _wr_wrlock(PART_LOCK); if (lock_levels.federation == READ_LOCK) - (void) _wr_rdlock(FED_LOCK, true); + _wr_rdlock(FED_LOCK); else if (lock_levels.federation == WRITE_LOCK) - (void) _wr_wrlock(FED_LOCK, true); + _wr_wrlock(FED_LOCK); } /* unlock_slurmctld - Issue the required unlock requests in a well @@ -130,10 +130,8 @@ extern void unlock_slurmctld(slurmctld_lock_t lock_levels) * * NOTE: Always favoring write locks could result in starvation for * read locks. */ -static bool _wr_rdlock(lock_datatype_t datatype, bool wait_lock) +static void _wr_rdlock(lock_datatype_t datatype) { - bool success = true; - slurm_mutex_lock(&locks_mutex); while (1) { if ((slurmctld_locks.entity[write_lock(datatype)] == 0) && @@ -141,9 +139,6 @@ static bool _wr_rdlock(lock_datatype_t datatype, bool wait_lock) slurmctld_locks.entity[read_lock(datatype)]++; slurmctld_locks.entity[write_cnt_lock(datatype)] = 0; break; - } else if (!wait_lock) { - success = false; - break; } else { /* wait for state change and retry */ slurm_cond_wait(&locks_cond, &locks_mutex); if (kill_thread) @@ -151,7 +146,6 @@ static bool _wr_rdlock(lock_datatype_t datatype, bool wait_lock) } } slurm_mutex_unlock(&locks_mutex); - return success; } /* _wr_rdunlock - Issue a read unlock on the specified data type */ @@ -164,10 +158,8 @@ static void _wr_rdunlock(lock_datatype_t datatype) } /* _wr_wrlock - Issue a write lock on the specified data type */ -static bool _wr_wrlock(lock_datatype_t datatype, bool wait_lock) +static void _wr_wrlock(lock_datatype_t datatype) { - bool success = true; - slurm_mutex_lock(&locks_mutex); slurmctld_locks.entity[write_wait_lock(datatype)]++; @@ -178,10 +170,6 @@ static bool _wr_wrlock(lock_datatype_t datatype, bool wait_lock) slurmctld_locks.entity[write_wait_lock(datatype)]--; slurmctld_locks.entity[write_cnt_lock(datatype)]++; break; - } else if (!wait_lock) { - slurmctld_locks.entity[write_wait_lock(datatype)]--; - success = false; - break; } else { /* wait for state change and retry */ slurm_cond_wait(&locks_cond, &locks_mutex); if (kill_thread) @@ -189,7 +177,6 @@ static bool _wr_wrlock(lock_datatype_t datatype, bool wait_lock) } } slurm_mutex_unlock(&locks_mutex); - return success; } /* _wr_wrunlock - Issue a write unlock on the specified data type */ -- GitLab