diff --git a/src/slurmctld/locks.c b/src/slurmctld/locks.c index 70a4012097e674db2b5c33516393d5b89d789360..80a5d1251fb8c9e1a0e2d5d103771b7ee8b55728 100644 --- a/src/slurmctld/locks.c +++ b/src/slurmctld/locks.c @@ -102,6 +102,11 @@ static bool _clear_locks(slurmctld_lock_t lock_levels) return true; } + +extern bool verify_lock(lock_datatype_t datatype, lock_level_t level) +{ + return (((lock_level_t *) &thread_locks)[datatype] >= level); +} #endif /* init_locks - create locks used for slurmctld data structure access diff --git a/src/slurmctld/locks.h b/src/slurmctld/locks.h index 443cda3a6e8f39602aef87ed3e99d4735f4e96da..1cf4d0479bc389ad0209e29f938fc82bf88b4bc0 100644 --- a/src/slurmctld/locks.h +++ b/src/slurmctld/locks.h @@ -91,6 +91,8 @@ #ifndef _SLURMCTLD_LOCKS_H #define _SLURMCTLD_LOCKS_H +#include <stdbool.h> + /* levels of locking required for each data structure */ typedef enum { NO_LOCK, @@ -125,6 +127,10 @@ typedef enum { ENTITY_COUNT } lock_datatype_t; +#ifndef NDEBUG +extern bool verify_lock(lock_datatype_t datatype, lock_level_t level); +#endif + #define read_lock(data_type) (data_type * 4 + 0) #define write_lock(data_type) (data_type * 4 + 1) #define write_wait_lock(data_type) (data_type * 4 + 2)