Lines Matching refs:sem

40 SDL_DestroySemaphore(SDL_sem * sem)  in SDL_DestroySemaphore()  argument
45 SDL_SemTryWait(SDL_sem * sem) in SDL_SemTryWait() argument
51 SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) in SDL_SemWaitTimeout() argument
57 SDL_SemWait(SDL_sem * sem) in SDL_SemWait() argument
63 SDL_SemValue(SDL_sem * sem) in SDL_SemValue() argument
69 SDL_SemPost(SDL_sem * sem) in SDL_SemPost() argument
87 SDL_sem *sem; in SDL_CreateSemaphore() local
89 sem = (SDL_sem *) SDL_malloc(sizeof(*sem)); in SDL_CreateSemaphore()
90 if (!sem) { in SDL_CreateSemaphore()
94 sem->count = initial_value; in SDL_CreateSemaphore()
95 sem->waiters_count = 0; in SDL_CreateSemaphore()
97 sem->count_lock = SDL_CreateMutex(); in SDL_CreateSemaphore()
98 sem->count_nonzero = SDL_CreateCond(); in SDL_CreateSemaphore()
99 if (!sem->count_lock || !sem->count_nonzero) { in SDL_CreateSemaphore()
100 SDL_DestroySemaphore(sem); in SDL_CreateSemaphore()
104 return sem; in SDL_CreateSemaphore()
111 SDL_DestroySemaphore(SDL_sem * sem) in SDL_DestroySemaphore() argument
113 if (sem) { in SDL_DestroySemaphore()
114 sem->count = 0xFFFFFFFF; in SDL_DestroySemaphore()
115 while (sem->waiters_count > 0) { in SDL_DestroySemaphore()
116 SDL_CondSignal(sem->count_nonzero); in SDL_DestroySemaphore()
119 SDL_DestroyCond(sem->count_nonzero); in SDL_DestroySemaphore()
120 if (sem->count_lock) { in SDL_DestroySemaphore()
121 SDL_LockMutex(sem->count_lock); in SDL_DestroySemaphore()
122 SDL_UnlockMutex(sem->count_lock); in SDL_DestroySemaphore()
123 SDL_DestroyMutex(sem->count_lock); in SDL_DestroySemaphore()
125 SDL_free(sem); in SDL_DestroySemaphore()
130 SDL_SemTryWait(SDL_sem * sem) in SDL_SemTryWait() argument
134 if (!sem) { in SDL_SemTryWait()
139 SDL_LockMutex(sem->count_lock); in SDL_SemTryWait()
140 if (sem->count > 0) { in SDL_SemTryWait()
141 --sem->count; in SDL_SemTryWait()
144 SDL_UnlockMutex(sem->count_lock); in SDL_SemTryWait()
150 SDL_SemWaitTimeout(SDL_sem * sem, Uint32 timeout) in SDL_SemWaitTimeout() argument
154 if (!sem) { in SDL_SemWaitTimeout()
160 return SDL_SemTryWait(sem); in SDL_SemWaitTimeout()
163 SDL_LockMutex(sem->count_lock); in SDL_SemWaitTimeout()
164 ++sem->waiters_count; in SDL_SemWaitTimeout()
166 while ((sem->count == 0) && (retval != SDL_MUTEX_TIMEDOUT)) { in SDL_SemWaitTimeout()
167 retval = SDL_CondWaitTimeout(sem->count_nonzero, in SDL_SemWaitTimeout()
168 sem->count_lock, timeout); in SDL_SemWaitTimeout()
170 --sem->waiters_count; in SDL_SemWaitTimeout()
172 --sem->count; in SDL_SemWaitTimeout()
174 SDL_UnlockMutex(sem->count_lock); in SDL_SemWaitTimeout()
180 SDL_SemWait(SDL_sem * sem) in SDL_SemWait() argument
182 return SDL_SemWaitTimeout(sem, SDL_MUTEX_MAXWAIT); in SDL_SemWait()
186 SDL_SemValue(SDL_sem * sem) in SDL_SemValue() argument
191 if (sem) { in SDL_SemValue()
192 SDL_LockMutex(sem->count_lock); in SDL_SemValue()
193 value = sem->count; in SDL_SemValue()
194 SDL_UnlockMutex(sem->count_lock); in SDL_SemValue()
200 SDL_SemPost(SDL_sem * sem) in SDL_SemPost() argument
202 if (!sem) { in SDL_SemPost()
206 SDL_LockMutex(sem->count_lock); in SDL_SemPost()
207 if (sem->waiters_count > 0) { in SDL_SemPost()
208 SDL_CondSignal(sem->count_nonzero); in SDL_SemPost()
210 ++sem->count; in SDL_SemPost()
211 SDL_UnlockMutex(sem->count_lock); in SDL_SemPost()