68typedef struct kos_mutex {
82#define MUTEX_TYPE_NORMAL 0
83#define MUTEX_TYPE_OLDNORMAL 1
84#define MUTEX_TYPE_ERRORCHECK 2
85#define MUTEX_TYPE_RECURSIVE 3
86#define MUTEX_TYPE_DESTROYED 4
89#define MUTEX_TYPE_DEFAULT MUTEX_TYPE_NORMAL
93#define MUTEX_INITIALIZER { MUTEX_TYPE_NORMAL, NULL, 0 }
96#define ERRORCHECK_MUTEX_INITIALIZER { MUTEX_TYPE_ERRORCHECK, NULL, 0 }
99#define RECURSIVE_MUTEX_INITIALIZER { MUTEX_TYPE_RECURSIVE, NULL, 0 }
268static inline void __mutex_scoped_cleanup(
mutex_t **m) {
273#define ___mutex_lock_scoped(m, l) \
274 mutex_t *__scoped_mutex_##l __attribute__((cleanup(__mutex_scoped_cleanup))) = mutex_lock(m) ? NULL : (m)
276#define __mutex_lock_scoped(m, l) ___mutex_lock_scoped(m, l)
287#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 __nonnull_all int mutex_lock(mutex_t *m)
Lock a mutex.
Definition mutex.h:198
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_as_thread(mutex_t *m, kthread_t *thd) __nonnull_all
Unlock a mutex under another thread's authority.
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.
Structure describing one running thread.
Definition thread.h:164
Mutual exclusion lock type.
Definition mutex.h:68
int count
Definition mutex.h:71
kthread_t * holder
Definition mutex.h:70
unsigned int type
Definition mutex.h:69