Lines Matching refs:cond

44 	SDL_cond *cond;  in SDL_CreateCond()  local
46 cond = (SDL_cond *) SDL_malloc(sizeof(SDL_cond)); in SDL_CreateCond()
47 if ( cond ) { in SDL_CreateCond()
48 cond->lock = SDL_CreateMutex(); in SDL_CreateCond()
49 cond->wait_sem = SDL_CreateSemaphore(0); in SDL_CreateCond()
50 cond->wait_done = SDL_CreateSemaphore(0); in SDL_CreateCond()
51 cond->waiting = cond->signals = 0; in SDL_CreateCond()
52 if ( ! cond->lock || ! cond->wait_sem || ! cond->wait_done ) { in SDL_CreateCond()
53 SDL_DestroyCond(cond); in SDL_CreateCond()
54 cond = NULL; in SDL_CreateCond()
59 return(cond); in SDL_CreateCond()
63 void SDL_DestroyCond(SDL_cond *cond) in SDL_DestroyCond() argument
65 if ( cond ) { in SDL_DestroyCond()
66 if ( cond->wait_sem ) { in SDL_DestroyCond()
67 SDL_DestroySemaphore(cond->wait_sem); in SDL_DestroyCond()
69 if ( cond->wait_done ) { in SDL_DestroyCond()
70 SDL_DestroySemaphore(cond->wait_done); in SDL_DestroyCond()
72 if ( cond->lock ) { in SDL_DestroyCond()
73 SDL_DestroyMutex(cond->lock); in SDL_DestroyCond()
75 SDL_free(cond); in SDL_DestroyCond()
80 int SDL_CondSignal(SDL_cond *cond) in SDL_CondSignal() argument
82 if ( ! cond ) { in SDL_CondSignal()
90 SDL_LockMutex(cond->lock); in SDL_CondSignal()
91 if ( cond->waiting > cond->signals ) { in SDL_CondSignal()
92 ++cond->signals; in SDL_CondSignal()
93 SDL_SemPost(cond->wait_sem); in SDL_CondSignal()
94 SDL_UnlockMutex(cond->lock); in SDL_CondSignal()
95 SDL_SemWait(cond->wait_done); in SDL_CondSignal()
97 SDL_UnlockMutex(cond->lock); in SDL_CondSignal()
104 int SDL_CondBroadcast(SDL_cond *cond) in SDL_CondBroadcast() argument
106 if ( ! cond ) { in SDL_CondBroadcast()
114 SDL_LockMutex(cond->lock); in SDL_CondBroadcast()
115 if ( cond->waiting > cond->signals ) { in SDL_CondBroadcast()
118 num_waiting = (cond->waiting - cond->signals); in SDL_CondBroadcast()
119 cond->signals = cond->waiting; in SDL_CondBroadcast()
121 SDL_SemPost(cond->wait_sem); in SDL_CondBroadcast()
126 SDL_UnlockMutex(cond->lock); in SDL_CondBroadcast()
128 SDL_SemWait(cond->wait_done); in SDL_CondBroadcast()
131 SDL_UnlockMutex(cond->lock); in SDL_CondBroadcast()
157 int SDL_CondWaitTimeout(SDL_cond *cond, SDL_mutex *mutex, Uint32 ms) in SDL_CondWaitTimeout() argument
161 if ( ! cond ) { in SDL_CondWaitTimeout()
170 SDL_LockMutex(cond->lock); in SDL_CondWaitTimeout()
171 ++cond->waiting; in SDL_CondWaitTimeout()
172 SDL_UnlockMutex(cond->lock); in SDL_CondWaitTimeout()
179 retval = SDL_SemWait(cond->wait_sem); in SDL_CondWaitTimeout()
181 retval = SDL_SemWaitTimeout(cond->wait_sem, ms); in SDL_CondWaitTimeout()
190 SDL_LockMutex(cond->lock); in SDL_CondWaitTimeout()
191 if ( cond->signals > 0 ) { in SDL_CondWaitTimeout()
194 SDL_SemWait(cond->wait_sem); in SDL_CondWaitTimeout()
197 SDL_SemPost(cond->wait_done); in SDL_CondWaitTimeout()
200 --cond->signals; in SDL_CondWaitTimeout()
202 --cond->waiting; in SDL_CondWaitTimeout()
203 SDL_UnlockMutex(cond->lock); in SDL_CondWaitTimeout()
212 int SDL_CondWait(SDL_cond *cond, SDL_mutex *mutex) in SDL_CondWait() argument
214 return SDL_CondWaitTimeout(cond, mutex, SDL_MUTEX_MAXWAIT); in SDL_CondWait()