56typedef struct kos_mutex {
70#define MUTEX_TYPE_NORMAL 0
71#define MUTEX_TYPE_OLDNORMAL 1
72#define MUTEX_TYPE_RECURSIVE 3
73#define MUTEX_TYPE_DESTROYED 4
75 __depr(
"Error-checking mutexes are deprecated")
79#define MUTEX_TYPE_DEFAULT MUTEX_TYPE_NORMAL
83#define MUTEX_INITIALIZER { MUTEX_TYPE_NORMAL, NULL, 0 }
86#define ERRORCHECK_MUTEX_INITIALIZER { MUTEX_TYPE_ERRORCHECK, NULL, 0 }
89#define RECURSIVE_MUTEX_INITIALIZER { MUTEX_TYPE_RECURSIVE, NULL, 0 }
238static inline void __mutex_scoped_cleanup(
mutex_t **m) {
243#define ___mutex_lock_scoped(m, l) \
244 mutex_t *__scoped_mutex_##l __attribute__((cleanup(__mutex_scoped_cleanup))) = mutex_lock(m) ? NULL : (m)
246#define __mutex_lock_scoped(m, l) ___mutex_lock_scoped(m, l)
257#define mutex_lock_scoped(m) __mutex_lock_scoped((m), __LINE__)
Various common macros used throughout the codebase.
int mutex_destroy(mutex_t *m) __nonnull_all
Destroy a mutex.
int mutex_lock_timed(mutex_t *m, unsigned int timeout) __nonnull_all
Lock a mutex (with a timeout).
static const unsigned int MUTEX_TYPE_ERRORCHECK
Definition mutex.h:76
static __nonnull_all int mutex_lock(mutex_t *m)
Lock a mutex.
Definition mutex.h:188
int mutex_lock_irqsafe(mutex_t *m) __nonnull_all
Lock a mutex.
int mutex_init(mutex_t *m, unsigned int mtype) __nonnull_all
Initialize a new mutex.
int mutex_unlock(mutex_t *m) __nonnull_all
Unlock a mutex.
int __pure mutex_is_locked(const mutex_t *m) __nonnull_all
Check if a mutex is locked.
int mutex_trylock(mutex_t *m) __nonnull_all
Attempt to lock a mutex.
Mutual exclusion lock type.
Definition mutex.h:56
struct kthread * holder
Definition mutex.h:58
int count
Definition mutex.h:59
unsigned int type
Definition mutex.h:57