38#if defined(SDL_THREAD_SAFETY_ANALYSIS) && \
39 defined(__clang__) && (!defined(SWIG))
40#define SDL_THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
42#define SDL_THREAD_ANNOTATION_ATTRIBUTE__(x)
45#define SDL_CAPABILITY(x) \
46 SDL_THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
48#define SDL_SCOPED_CAPABILITY \
49 SDL_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
51#define SDL_GUARDED_BY(x) \
52 SDL_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
54#define SDL_PT_GUARDED_BY(x) \
55 SDL_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
57#define SDL_ACQUIRED_BEFORE(x) \
58 SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(x))
60#define SDL_ACQUIRED_AFTER(x) \
61 SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(x))
63#define SDL_REQUIRES(x) \
64 SDL_THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(x))
66#define SDL_REQUIRES_SHARED(x) \
67 SDL_THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(x))
69#define SDL_ACQUIRE(x) \
70 SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(x))
72#define SDL_ACQUIRE_SHARED(x) \
73 SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(x))
75#define SDL_RELEASE(x) \
76 SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_capability(x))
78#define SDL_RELEASE_SHARED(x) \
79 SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(x))
81#define SDL_RELEASE_GENERIC(x) \
82 SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_generic_capability(x))
84#define SDL_TRY_ACQUIRE(x, y) \
85 SDL_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(x, y))
87#define SDL_TRY_ACQUIRE_SHARED(x, y) \
88 SDL_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(x, y))
90#define SDL_EXCLUDES(x) \
91 SDL_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(x))
93#define SDL_ASSERT_CAPABILITY(x) \
94 SDL_THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
96#define SDL_ASSERT_SHARED_CAPABILITY(x) \
97 SDL_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
99#define SDL_RETURN_CAPABILITY(x) \
100 SDL_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
102#define SDL_NO_THREAD_SAFETY_ANALYSIS \
103 SDL_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
118#define SDL_MUTEX_TIMEDOUT 1
123#define SDL_MUTEX_MAXWAIT -1
252#define SDL_RWLOCK_TIMEDOUT SDL_MUTEX_TIMEDOUT
void SDL_DestroyRWLock(SDL_RWLock *rwlock)
int SDL_TryLockMutex(SDL_Mutex *mutex) SDL_TRY_ACQUIRE(0
#define SDL_TRY_ACQUIRE(x, y)
SDL_RWLock * SDL_CreateRWLock(void)
void SDL_DestroySemaphore(SDL_Semaphore *sem)
#define SDL_TRY_ACQUIRE_SHARED(x, y)
#define SDL_ACQUIRE_SHARED(x)
int SDL_PostSemaphore(SDL_Semaphore *sem)
int SDL_WaitCondition(SDL_Condition *cond, SDL_Mutex *mutex)
int SDL_SignalCondition(SDL_Condition *cond)
int SDL_LockRWLockForWriting(SDL_RWLock *rwlock) SDL_ACQUIRE(rwlock)
struct SDL_Mutex SDL_Mutex
int SDL_TryLockRWLockForReading(SDL_RWLock *rwlock) SDL_TRY_ACQUIRE_SHARED(0
SDL_Semaphore * SDL_CreateSemaphore(Uint32 initial_value)
int SDL_WaitSemaphoreTimeout(SDL_Semaphore *sem, Sint32 timeoutMS)
int SDL_TryWaitSemaphore(SDL_Semaphore *sem)
Uint32 SDL_GetSemaphoreValue(SDL_Semaphore *sem)
int SDL_LockRWLockForReading(SDL_RWLock *rwlock) SDL_ACQUIRE_SHARED(rwlock)
struct SDL_Semaphore SDL_Semaphore
int SDL_WaitConditionTimeout(SDL_Condition *cond, SDL_Mutex *mutex, Sint32 timeoutMS)
int SDL_LockMutex(SDL_Mutex *mutex) SDL_ACQUIRE(mutex)
int SDL_UnlockMutex(SDL_Mutex *mutex) SDL_RELEASE(mutex)
int SDL_UnlockRWLock(SDL_RWLock *rwlock) SDL_RELEASE_SHARED(rwlock)
#define SDL_RELEASE_SHARED(x)
int SDL_BroadcastCondition(SDL_Condition *cond)
struct SDL_RWLock SDL_RWLock
void SDL_DestroyCondition(SDL_Condition *cond)
void SDL_DestroyMutex(SDL_Mutex *mutex)
SDL_Condition * SDL_CreateCondition(void)
SDL_Mutex * SDL_CreateMutex(void)
int SDL_WaitSemaphore(SDL_Semaphore *sem)
int SDL_TryLockRWLockForWriting(SDL_RWLock *rwlock) SDL_TRY_ACQUIRE(0
struct SDL_Condition SDL_Condition
This is a general header that includes C language support.