1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * Threading primitives for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Copyright © 2009-2018 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker *
6*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more
7*5e7646d2SAndroid Build Coastguard Worker * information.
8*5e7646d2SAndroid Build Coastguard Worker */
9*5e7646d2SAndroid Build Coastguard Worker
10*5e7646d2SAndroid Build Coastguard Worker /*
11*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
12*5e7646d2SAndroid Build Coastguard Worker */
13*5e7646d2SAndroid Build Coastguard Worker
14*5e7646d2SAndroid Build Coastguard Worker #include "cups-private.h"
15*5e7646d2SAndroid Build Coastguard Worker #include "thread-private.h"
16*5e7646d2SAndroid Build Coastguard Worker
17*5e7646d2SAndroid Build Coastguard Worker
18*5e7646d2SAndroid Build Coastguard Worker #if defined(HAVE_PTHREAD_H)
19*5e7646d2SAndroid Build Coastguard Worker /*
20*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondBroadcast()' - Wake up waiting threads.
21*5e7646d2SAndroid Build Coastguard Worker */
22*5e7646d2SAndroid Build Coastguard Worker
23*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondBroadcast(_cups_cond_t * cond)24*5e7646d2SAndroid Build Coastguard Worker _cupsCondBroadcast(_cups_cond_t *cond) /* I - Condition */
25*5e7646d2SAndroid Build Coastguard Worker {
26*5e7646d2SAndroid Build Coastguard Worker pthread_cond_broadcast(cond);
27*5e7646d2SAndroid Build Coastguard Worker }
28*5e7646d2SAndroid Build Coastguard Worker
29*5e7646d2SAndroid Build Coastguard Worker
30*5e7646d2SAndroid Build Coastguard Worker /*
31*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondInit()' - Initialize a condition variable.
32*5e7646d2SAndroid Build Coastguard Worker */
33*5e7646d2SAndroid Build Coastguard Worker
34*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondInit(_cups_cond_t * cond)35*5e7646d2SAndroid Build Coastguard Worker _cupsCondInit(_cups_cond_t *cond) /* I - Condition */
36*5e7646d2SAndroid Build Coastguard Worker {
37*5e7646d2SAndroid Build Coastguard Worker pthread_cond_init(cond, NULL);
38*5e7646d2SAndroid Build Coastguard Worker }
39*5e7646d2SAndroid Build Coastguard Worker
40*5e7646d2SAndroid Build Coastguard Worker
41*5e7646d2SAndroid Build Coastguard Worker /*
42*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondWait()' - Wait for a condition with optional timeout.
43*5e7646d2SAndroid Build Coastguard Worker */
44*5e7646d2SAndroid Build Coastguard Worker
45*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondWait(_cups_cond_t * cond,_cups_mutex_t * mutex,double timeout)46*5e7646d2SAndroid Build Coastguard Worker _cupsCondWait(_cups_cond_t *cond, /* I - Condition */
47*5e7646d2SAndroid Build Coastguard Worker _cups_mutex_t *mutex, /* I - Mutex */
48*5e7646d2SAndroid Build Coastguard Worker double timeout) /* I - Timeout in seconds (0 or negative for none) */
49*5e7646d2SAndroid Build Coastguard Worker {
50*5e7646d2SAndroid Build Coastguard Worker if (timeout > 0.0)
51*5e7646d2SAndroid Build Coastguard Worker {
52*5e7646d2SAndroid Build Coastguard Worker struct timespec abstime; /* Timeout */
53*5e7646d2SAndroid Build Coastguard Worker
54*5e7646d2SAndroid Build Coastguard Worker clock_gettime(CLOCK_REALTIME, &abstime);
55*5e7646d2SAndroid Build Coastguard Worker
56*5e7646d2SAndroid Build Coastguard Worker abstime.tv_sec += (long)timeout;
57*5e7646d2SAndroid Build Coastguard Worker abstime.tv_nsec += (long)(1000000000 * (timeout - (long)timeout));
58*5e7646d2SAndroid Build Coastguard Worker
59*5e7646d2SAndroid Build Coastguard Worker while (abstime.tv_nsec >= 1000000000)
60*5e7646d2SAndroid Build Coastguard Worker {
61*5e7646d2SAndroid Build Coastguard Worker abstime.tv_nsec -= 1000000000;
62*5e7646d2SAndroid Build Coastguard Worker abstime.tv_sec ++;
63*5e7646d2SAndroid Build Coastguard Worker };
64*5e7646d2SAndroid Build Coastguard Worker
65*5e7646d2SAndroid Build Coastguard Worker pthread_cond_timedwait(cond, mutex, &abstime);
66*5e7646d2SAndroid Build Coastguard Worker }
67*5e7646d2SAndroid Build Coastguard Worker else
68*5e7646d2SAndroid Build Coastguard Worker pthread_cond_wait(cond, mutex);
69*5e7646d2SAndroid Build Coastguard Worker }
70*5e7646d2SAndroid Build Coastguard Worker
71*5e7646d2SAndroid Build Coastguard Worker
72*5e7646d2SAndroid Build Coastguard Worker /*
73*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexInit()' - Initialize a mutex.
74*5e7646d2SAndroid Build Coastguard Worker */
75*5e7646d2SAndroid Build Coastguard Worker
76*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexInit(_cups_mutex_t * mutex)77*5e7646d2SAndroid Build Coastguard Worker _cupsMutexInit(_cups_mutex_t *mutex) /* I - Mutex */
78*5e7646d2SAndroid Build Coastguard Worker {
79*5e7646d2SAndroid Build Coastguard Worker pthread_mutex_init(mutex, NULL);
80*5e7646d2SAndroid Build Coastguard Worker }
81*5e7646d2SAndroid Build Coastguard Worker
82*5e7646d2SAndroid Build Coastguard Worker
83*5e7646d2SAndroid Build Coastguard Worker /*
84*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexLock()' - Lock a mutex.
85*5e7646d2SAndroid Build Coastguard Worker */
86*5e7646d2SAndroid Build Coastguard Worker
87*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexLock(_cups_mutex_t * mutex)88*5e7646d2SAndroid Build Coastguard Worker _cupsMutexLock(_cups_mutex_t *mutex) /* I - Mutex */
89*5e7646d2SAndroid Build Coastguard Worker {
90*5e7646d2SAndroid Build Coastguard Worker pthread_mutex_lock(mutex);
91*5e7646d2SAndroid Build Coastguard Worker }
92*5e7646d2SAndroid Build Coastguard Worker
93*5e7646d2SAndroid Build Coastguard Worker
94*5e7646d2SAndroid Build Coastguard Worker /*
95*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexUnlock()' - Unlock a mutex.
96*5e7646d2SAndroid Build Coastguard Worker */
97*5e7646d2SAndroid Build Coastguard Worker
98*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexUnlock(_cups_mutex_t * mutex)99*5e7646d2SAndroid Build Coastguard Worker _cupsMutexUnlock(_cups_mutex_t *mutex) /* I - Mutex */
100*5e7646d2SAndroid Build Coastguard Worker {
101*5e7646d2SAndroid Build Coastguard Worker pthread_mutex_unlock(mutex);
102*5e7646d2SAndroid Build Coastguard Worker }
103*5e7646d2SAndroid Build Coastguard Worker
104*5e7646d2SAndroid Build Coastguard Worker
105*5e7646d2SAndroid Build Coastguard Worker /*
106*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWInit()' - Initialize a reader/writer lock.
107*5e7646d2SAndroid Build Coastguard Worker */
108*5e7646d2SAndroid Build Coastguard Worker
109*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWInit(_cups_rwlock_t * rwlock)110*5e7646d2SAndroid Build Coastguard Worker _cupsRWInit(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
111*5e7646d2SAndroid Build Coastguard Worker {
112*5e7646d2SAndroid Build Coastguard Worker pthread_rwlock_init(rwlock, NULL);
113*5e7646d2SAndroid Build Coastguard Worker }
114*5e7646d2SAndroid Build Coastguard Worker
115*5e7646d2SAndroid Build Coastguard Worker
116*5e7646d2SAndroid Build Coastguard Worker /*
117*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
118*5e7646d2SAndroid Build Coastguard Worker */
119*5e7646d2SAndroid Build Coastguard Worker
120*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWLockRead(_cups_rwlock_t * rwlock)121*5e7646d2SAndroid Build Coastguard Worker _cupsRWLockRead(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
122*5e7646d2SAndroid Build Coastguard Worker {
123*5e7646d2SAndroid Build Coastguard Worker pthread_rwlock_rdlock(rwlock);
124*5e7646d2SAndroid Build Coastguard Worker }
125*5e7646d2SAndroid Build Coastguard Worker
126*5e7646d2SAndroid Build Coastguard Worker
127*5e7646d2SAndroid Build Coastguard Worker /*
128*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
129*5e7646d2SAndroid Build Coastguard Worker */
130*5e7646d2SAndroid Build Coastguard Worker
131*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWLockWrite(_cups_rwlock_t * rwlock)132*5e7646d2SAndroid Build Coastguard Worker _cupsRWLockWrite(_cups_rwlock_t *rwlock)/* I - Reader/writer lock */
133*5e7646d2SAndroid Build Coastguard Worker {
134*5e7646d2SAndroid Build Coastguard Worker pthread_rwlock_wrlock(rwlock);
135*5e7646d2SAndroid Build Coastguard Worker }
136*5e7646d2SAndroid Build Coastguard Worker
137*5e7646d2SAndroid Build Coastguard Worker
138*5e7646d2SAndroid Build Coastguard Worker /*
139*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWUnlock()' - Release a reader/writer lock.
140*5e7646d2SAndroid Build Coastguard Worker */
141*5e7646d2SAndroid Build Coastguard Worker
142*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWUnlock(_cups_rwlock_t * rwlock)143*5e7646d2SAndroid Build Coastguard Worker _cupsRWUnlock(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
144*5e7646d2SAndroid Build Coastguard Worker {
145*5e7646d2SAndroid Build Coastguard Worker pthread_rwlock_unlock(rwlock);
146*5e7646d2SAndroid Build Coastguard Worker }
147*5e7646d2SAndroid Build Coastguard Worker
148*5e7646d2SAndroid Build Coastguard Worker
149*5e7646d2SAndroid Build Coastguard Worker /*
150*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadCancel()' - Cancel (kill) a thread.
151*5e7646d2SAndroid Build Coastguard Worker */
152*5e7646d2SAndroid Build Coastguard Worker
153*5e7646d2SAndroid Build Coastguard Worker void
_cupsThreadCancel(_cups_thread_t thread)154*5e7646d2SAndroid Build Coastguard Worker _cupsThreadCancel(_cups_thread_t thread)/* I - Thread ID */
155*5e7646d2SAndroid Build Coastguard Worker {
156*5e7646d2SAndroid Build Coastguard Worker pthread_cancel(thread);
157*5e7646d2SAndroid Build Coastguard Worker }
158*5e7646d2SAndroid Build Coastguard Worker
159*5e7646d2SAndroid Build Coastguard Worker
160*5e7646d2SAndroid Build Coastguard Worker /*
161*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadCreate()' - Create a thread.
162*5e7646d2SAndroid Build Coastguard Worker */
163*5e7646d2SAndroid Build Coastguard Worker
164*5e7646d2SAndroid Build Coastguard Worker _cups_thread_t /* O - Thread ID */
_cupsThreadCreate(_cups_thread_func_t func,void * arg)165*5e7646d2SAndroid Build Coastguard Worker _cupsThreadCreate(
166*5e7646d2SAndroid Build Coastguard Worker _cups_thread_func_t func, /* I - Entry point */
167*5e7646d2SAndroid Build Coastguard Worker void *arg) /* I - Entry point context */
168*5e7646d2SAndroid Build Coastguard Worker {
169*5e7646d2SAndroid Build Coastguard Worker pthread_t thread;
170*5e7646d2SAndroid Build Coastguard Worker
171*5e7646d2SAndroid Build Coastguard Worker if (pthread_create(&thread, NULL, (void *(*)(void *))func, arg))
172*5e7646d2SAndroid Build Coastguard Worker return (0);
173*5e7646d2SAndroid Build Coastguard Worker else
174*5e7646d2SAndroid Build Coastguard Worker return (thread);
175*5e7646d2SAndroid Build Coastguard Worker }
176*5e7646d2SAndroid Build Coastguard Worker
177*5e7646d2SAndroid Build Coastguard Worker
178*5e7646d2SAndroid Build Coastguard Worker /*
179*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadDetach()' - Tell the OS that the thread is running independently.
180*5e7646d2SAndroid Build Coastguard Worker */
181*5e7646d2SAndroid Build Coastguard Worker
182*5e7646d2SAndroid Build Coastguard Worker void
_cupsThreadDetach(_cups_thread_t thread)183*5e7646d2SAndroid Build Coastguard Worker _cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */
184*5e7646d2SAndroid Build Coastguard Worker {
185*5e7646d2SAndroid Build Coastguard Worker pthread_detach(thread);
186*5e7646d2SAndroid Build Coastguard Worker }
187*5e7646d2SAndroid Build Coastguard Worker
188*5e7646d2SAndroid Build Coastguard Worker
189*5e7646d2SAndroid Build Coastguard Worker /*
190*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadWait()' - Wait for a thread to exit.
191*5e7646d2SAndroid Build Coastguard Worker */
192*5e7646d2SAndroid Build Coastguard Worker
193*5e7646d2SAndroid Build Coastguard Worker void * /* O - Return value */
_cupsThreadWait(_cups_thread_t thread)194*5e7646d2SAndroid Build Coastguard Worker _cupsThreadWait(_cups_thread_t thread) /* I - Thread ID */
195*5e7646d2SAndroid Build Coastguard Worker {
196*5e7646d2SAndroid Build Coastguard Worker void *ret; /* Return value */
197*5e7646d2SAndroid Build Coastguard Worker
198*5e7646d2SAndroid Build Coastguard Worker
199*5e7646d2SAndroid Build Coastguard Worker if (pthread_join(thread, &ret))
200*5e7646d2SAndroid Build Coastguard Worker return (NULL);
201*5e7646d2SAndroid Build Coastguard Worker else
202*5e7646d2SAndroid Build Coastguard Worker return (ret);
203*5e7646d2SAndroid Build Coastguard Worker }
204*5e7646d2SAndroid Build Coastguard Worker
205*5e7646d2SAndroid Build Coastguard Worker
206*5e7646d2SAndroid Build Coastguard Worker #elif defined(_WIN32)
207*5e7646d2SAndroid Build Coastguard Worker # include <process.h>
208*5e7646d2SAndroid Build Coastguard Worker
209*5e7646d2SAndroid Build Coastguard Worker
210*5e7646d2SAndroid Build Coastguard Worker /*
211*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondBroadcast()' - Wake up waiting threads.
212*5e7646d2SAndroid Build Coastguard Worker */
213*5e7646d2SAndroid Build Coastguard Worker
214*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondBroadcast(_cups_cond_t * cond)215*5e7646d2SAndroid Build Coastguard Worker _cupsCondBroadcast(_cups_cond_t *cond) /* I - Condition */
216*5e7646d2SAndroid Build Coastguard Worker {
217*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
218*5e7646d2SAndroid Build Coastguard Worker }
219*5e7646d2SAndroid Build Coastguard Worker
220*5e7646d2SAndroid Build Coastguard Worker
221*5e7646d2SAndroid Build Coastguard Worker /*
222*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondInit()' - Initialize a condition variable.
223*5e7646d2SAndroid Build Coastguard Worker */
224*5e7646d2SAndroid Build Coastguard Worker
225*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondInit(_cups_cond_t * cond)226*5e7646d2SAndroid Build Coastguard Worker _cupsCondInit(_cups_cond_t *cond) /* I - Condition */
227*5e7646d2SAndroid Build Coastguard Worker {
228*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
229*5e7646d2SAndroid Build Coastguard Worker }
230*5e7646d2SAndroid Build Coastguard Worker
231*5e7646d2SAndroid Build Coastguard Worker
232*5e7646d2SAndroid Build Coastguard Worker /*
233*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondWait()' - Wait for a condition with optional timeout.
234*5e7646d2SAndroid Build Coastguard Worker */
235*5e7646d2SAndroid Build Coastguard Worker
236*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondWait(_cups_cond_t * cond,_cups_mutex_t * mutex,double timeout)237*5e7646d2SAndroid Build Coastguard Worker _cupsCondWait(_cups_cond_t *cond, /* I - Condition */
238*5e7646d2SAndroid Build Coastguard Worker _cups_mutex_t *mutex, /* I - Mutex */
239*5e7646d2SAndroid Build Coastguard Worker double timeout) /* I - Timeout in seconds (0 or negative for none) */
240*5e7646d2SAndroid Build Coastguard Worker {
241*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
242*5e7646d2SAndroid Build Coastguard Worker }
243*5e7646d2SAndroid Build Coastguard Worker
244*5e7646d2SAndroid Build Coastguard Worker
245*5e7646d2SAndroid Build Coastguard Worker /*
246*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexInit()' - Initialize a mutex.
247*5e7646d2SAndroid Build Coastguard Worker */
248*5e7646d2SAndroid Build Coastguard Worker
249*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexInit(_cups_mutex_t * mutex)250*5e7646d2SAndroid Build Coastguard Worker _cupsMutexInit(_cups_mutex_t *mutex) /* I - Mutex */
251*5e7646d2SAndroid Build Coastguard Worker {
252*5e7646d2SAndroid Build Coastguard Worker InitializeCriticalSection(&mutex->m_criticalSection);
253*5e7646d2SAndroid Build Coastguard Worker mutex->m_init = 1;
254*5e7646d2SAndroid Build Coastguard Worker }
255*5e7646d2SAndroid Build Coastguard Worker
256*5e7646d2SAndroid Build Coastguard Worker
257*5e7646d2SAndroid Build Coastguard Worker /*
258*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexLock()' - Lock a mutex.
259*5e7646d2SAndroid Build Coastguard Worker */
260*5e7646d2SAndroid Build Coastguard Worker
261*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexLock(_cups_mutex_t * mutex)262*5e7646d2SAndroid Build Coastguard Worker _cupsMutexLock(_cups_mutex_t *mutex) /* I - Mutex */
263*5e7646d2SAndroid Build Coastguard Worker {
264*5e7646d2SAndroid Build Coastguard Worker if (!mutex->m_init)
265*5e7646d2SAndroid Build Coastguard Worker {
266*5e7646d2SAndroid Build Coastguard Worker _cupsGlobalLock();
267*5e7646d2SAndroid Build Coastguard Worker
268*5e7646d2SAndroid Build Coastguard Worker if (!mutex->m_init)
269*5e7646d2SAndroid Build Coastguard Worker {
270*5e7646d2SAndroid Build Coastguard Worker InitializeCriticalSection(&mutex->m_criticalSection);
271*5e7646d2SAndroid Build Coastguard Worker mutex->m_init = 1;
272*5e7646d2SAndroid Build Coastguard Worker }
273*5e7646d2SAndroid Build Coastguard Worker
274*5e7646d2SAndroid Build Coastguard Worker _cupsGlobalUnlock();
275*5e7646d2SAndroid Build Coastguard Worker }
276*5e7646d2SAndroid Build Coastguard Worker
277*5e7646d2SAndroid Build Coastguard Worker EnterCriticalSection(&mutex->m_criticalSection);
278*5e7646d2SAndroid Build Coastguard Worker }
279*5e7646d2SAndroid Build Coastguard Worker
280*5e7646d2SAndroid Build Coastguard Worker
281*5e7646d2SAndroid Build Coastguard Worker /*
282*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexUnlock()' - Unlock a mutex.
283*5e7646d2SAndroid Build Coastguard Worker */
284*5e7646d2SAndroid Build Coastguard Worker
285*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexUnlock(_cups_mutex_t * mutex)286*5e7646d2SAndroid Build Coastguard Worker _cupsMutexUnlock(_cups_mutex_t *mutex) /* I - Mutex */
287*5e7646d2SAndroid Build Coastguard Worker {
288*5e7646d2SAndroid Build Coastguard Worker LeaveCriticalSection(&mutex->m_criticalSection);
289*5e7646d2SAndroid Build Coastguard Worker }
290*5e7646d2SAndroid Build Coastguard Worker
291*5e7646d2SAndroid Build Coastguard Worker
292*5e7646d2SAndroid Build Coastguard Worker /*
293*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWInit()' - Initialize a reader/writer lock.
294*5e7646d2SAndroid Build Coastguard Worker */
295*5e7646d2SAndroid Build Coastguard Worker
296*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWInit(_cups_rwlock_t * rwlock)297*5e7646d2SAndroid Build Coastguard Worker _cupsRWInit(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
298*5e7646d2SAndroid Build Coastguard Worker {
299*5e7646d2SAndroid Build Coastguard Worker _cupsMutexInit((_cups_mutex_t *)rwlock);
300*5e7646d2SAndroid Build Coastguard Worker }
301*5e7646d2SAndroid Build Coastguard Worker
302*5e7646d2SAndroid Build Coastguard Worker
303*5e7646d2SAndroid Build Coastguard Worker /*
304*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
305*5e7646d2SAndroid Build Coastguard Worker */
306*5e7646d2SAndroid Build Coastguard Worker
307*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWLockRead(_cups_rwlock_t * rwlock)308*5e7646d2SAndroid Build Coastguard Worker _cupsRWLockRead(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
309*5e7646d2SAndroid Build Coastguard Worker {
310*5e7646d2SAndroid Build Coastguard Worker _cupsMutexLock((_cups_mutex_t *)rwlock);
311*5e7646d2SAndroid Build Coastguard Worker }
312*5e7646d2SAndroid Build Coastguard Worker
313*5e7646d2SAndroid Build Coastguard Worker
314*5e7646d2SAndroid Build Coastguard Worker /*
315*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
316*5e7646d2SAndroid Build Coastguard Worker */
317*5e7646d2SAndroid Build Coastguard Worker
318*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWLockWrite(_cups_rwlock_t * rwlock)319*5e7646d2SAndroid Build Coastguard Worker _cupsRWLockWrite(_cups_rwlock_t *rwlock)/* I - Reader/writer lock */
320*5e7646d2SAndroid Build Coastguard Worker {
321*5e7646d2SAndroid Build Coastguard Worker _cupsMutexLock((_cups_mutex_t *)rwlock);
322*5e7646d2SAndroid Build Coastguard Worker }
323*5e7646d2SAndroid Build Coastguard Worker
324*5e7646d2SAndroid Build Coastguard Worker
325*5e7646d2SAndroid Build Coastguard Worker /*
326*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWUnlock()' - Release a reader/writer lock.
327*5e7646d2SAndroid Build Coastguard Worker */
328*5e7646d2SAndroid Build Coastguard Worker
329*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWUnlock(_cups_rwlock_t * rwlock)330*5e7646d2SAndroid Build Coastguard Worker _cupsRWUnlock(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
331*5e7646d2SAndroid Build Coastguard Worker {
332*5e7646d2SAndroid Build Coastguard Worker _cupsMutexUnlock((_cups_mutex_t *)rwlock);
333*5e7646d2SAndroid Build Coastguard Worker }
334*5e7646d2SAndroid Build Coastguard Worker
335*5e7646d2SAndroid Build Coastguard Worker
336*5e7646d2SAndroid Build Coastguard Worker /*
337*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadCancel()' - Cancel (kill) a thread.
338*5e7646d2SAndroid Build Coastguard Worker */
339*5e7646d2SAndroid Build Coastguard Worker
340*5e7646d2SAndroid Build Coastguard Worker void
_cupsThreadCancel(_cups_thread_t thread)341*5e7646d2SAndroid Build Coastguard Worker _cupsThreadCancel(_cups_thread_t thread)/* I - Thread ID */
342*5e7646d2SAndroid Build Coastguard Worker {
343*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
344*5e7646d2SAndroid Build Coastguard Worker }
345*5e7646d2SAndroid Build Coastguard Worker
346*5e7646d2SAndroid Build Coastguard Worker
347*5e7646d2SAndroid Build Coastguard Worker /*
348*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadCreate()' - Create a thread.
349*5e7646d2SAndroid Build Coastguard Worker */
350*5e7646d2SAndroid Build Coastguard Worker
351*5e7646d2SAndroid Build Coastguard Worker _cups_thread_t /* O - Thread ID */
_cupsThreadCreate(_cups_thread_func_t func,void * arg)352*5e7646d2SAndroid Build Coastguard Worker _cupsThreadCreate(
353*5e7646d2SAndroid Build Coastguard Worker _cups_thread_func_t func, /* I - Entry point */
354*5e7646d2SAndroid Build Coastguard Worker void *arg) /* I - Entry point context */
355*5e7646d2SAndroid Build Coastguard Worker {
356*5e7646d2SAndroid Build Coastguard Worker return (_beginthreadex(NULL, 0, (LPTHREAD_START_ROUTINE)func, arg, 0, NULL));
357*5e7646d2SAndroid Build Coastguard Worker }
358*5e7646d2SAndroid Build Coastguard Worker
359*5e7646d2SAndroid Build Coastguard Worker
360*5e7646d2SAndroid Build Coastguard Worker /*
361*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadDetach()' - Tell the OS that the thread is running independently.
362*5e7646d2SAndroid Build Coastguard Worker */
363*5e7646d2SAndroid Build Coastguard Worker
364*5e7646d2SAndroid Build Coastguard Worker void
_cupsThreadDetach(_cups_thread_t thread)365*5e7646d2SAndroid Build Coastguard Worker _cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */
366*5e7646d2SAndroid Build Coastguard Worker {
367*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
368*5e7646d2SAndroid Build Coastguard Worker (void)thread;
369*5e7646d2SAndroid Build Coastguard Worker }
370*5e7646d2SAndroid Build Coastguard Worker
371*5e7646d2SAndroid Build Coastguard Worker
372*5e7646d2SAndroid Build Coastguard Worker /*
373*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadWait()' - Wait for a thread to exit.
374*5e7646d2SAndroid Build Coastguard Worker */
375*5e7646d2SAndroid Build Coastguard Worker
376*5e7646d2SAndroid Build Coastguard Worker void * /* O - Return value */
_cupsThreadWait(_cups_thread_t thread)377*5e7646d2SAndroid Build Coastguard Worker _cupsThreadWait(_cups_thread_t thread) /* I - Thread ID */
378*5e7646d2SAndroid Build Coastguard Worker {
379*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
380*5e7646d2SAndroid Build Coastguard Worker (void)thread;
381*5e7646d2SAndroid Build Coastguard Worker
382*5e7646d2SAndroid Build Coastguard Worker return (NULL);
383*5e7646d2SAndroid Build Coastguard Worker }
384*5e7646d2SAndroid Build Coastguard Worker
385*5e7646d2SAndroid Build Coastguard Worker
386*5e7646d2SAndroid Build Coastguard Worker #else /* No threading */
387*5e7646d2SAndroid Build Coastguard Worker /*
388*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondBroadcast()' - Wake up waiting threads.
389*5e7646d2SAndroid Build Coastguard Worker */
390*5e7646d2SAndroid Build Coastguard Worker
391*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondBroadcast(_cups_cond_t * cond)392*5e7646d2SAndroid Build Coastguard Worker _cupsCondBroadcast(_cups_cond_t *cond) /* I - Condition */
393*5e7646d2SAndroid Build Coastguard Worker {
394*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
395*5e7646d2SAndroid Build Coastguard Worker }
396*5e7646d2SAndroid Build Coastguard Worker
397*5e7646d2SAndroid Build Coastguard Worker
398*5e7646d2SAndroid Build Coastguard Worker /*
399*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondInit()' - Initialize a condition variable.
400*5e7646d2SAndroid Build Coastguard Worker */
401*5e7646d2SAndroid Build Coastguard Worker
402*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondInit(_cups_cond_t * cond)403*5e7646d2SAndroid Build Coastguard Worker _cupsCondInit(_cups_cond_t *cond) /* I - Condition */
404*5e7646d2SAndroid Build Coastguard Worker {
405*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
406*5e7646d2SAndroid Build Coastguard Worker }
407*5e7646d2SAndroid Build Coastguard Worker
408*5e7646d2SAndroid Build Coastguard Worker
409*5e7646d2SAndroid Build Coastguard Worker /*
410*5e7646d2SAndroid Build Coastguard Worker * '_cupsCondWait()' - Wait for a condition with optional timeout.
411*5e7646d2SAndroid Build Coastguard Worker */
412*5e7646d2SAndroid Build Coastguard Worker
413*5e7646d2SAndroid Build Coastguard Worker void
_cupsCondWait(_cups_cond_t * cond,_cups_mutex_t * mutex,double timeout)414*5e7646d2SAndroid Build Coastguard Worker _cupsCondWait(_cups_cond_t *cond, /* I - Condition */
415*5e7646d2SAndroid Build Coastguard Worker _cups_mutex_t *mutex, /* I - Mutex */
416*5e7646d2SAndroid Build Coastguard Worker double timeout) /* I - Timeout in seconds (0 or negative for none) */
417*5e7646d2SAndroid Build Coastguard Worker {
418*5e7646d2SAndroid Build Coastguard Worker // TODO: Implement me
419*5e7646d2SAndroid Build Coastguard Worker }
420*5e7646d2SAndroid Build Coastguard Worker
421*5e7646d2SAndroid Build Coastguard Worker
422*5e7646d2SAndroid Build Coastguard Worker /*
423*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexInit()' - Initialize a mutex.
424*5e7646d2SAndroid Build Coastguard Worker */
425*5e7646d2SAndroid Build Coastguard Worker
426*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexInit(_cups_mutex_t * mutex)427*5e7646d2SAndroid Build Coastguard Worker _cupsMutexInit(_cups_mutex_t *mutex) /* I - Mutex */
428*5e7646d2SAndroid Build Coastguard Worker {
429*5e7646d2SAndroid Build Coastguard Worker (void)mutex;
430*5e7646d2SAndroid Build Coastguard Worker }
431*5e7646d2SAndroid Build Coastguard Worker
432*5e7646d2SAndroid Build Coastguard Worker
433*5e7646d2SAndroid Build Coastguard Worker /*
434*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexLock()' - Lock a mutex.
435*5e7646d2SAndroid Build Coastguard Worker */
436*5e7646d2SAndroid Build Coastguard Worker
437*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexLock(_cups_mutex_t * mutex)438*5e7646d2SAndroid Build Coastguard Worker _cupsMutexLock(_cups_mutex_t *mutex) /* I - Mutex */
439*5e7646d2SAndroid Build Coastguard Worker {
440*5e7646d2SAndroid Build Coastguard Worker (void)mutex;
441*5e7646d2SAndroid Build Coastguard Worker }
442*5e7646d2SAndroid Build Coastguard Worker
443*5e7646d2SAndroid Build Coastguard Worker
444*5e7646d2SAndroid Build Coastguard Worker /*
445*5e7646d2SAndroid Build Coastguard Worker * '_cupsMutexUnlock()' - Unlock a mutex.
446*5e7646d2SAndroid Build Coastguard Worker */
447*5e7646d2SAndroid Build Coastguard Worker
448*5e7646d2SAndroid Build Coastguard Worker void
_cupsMutexUnlock(_cups_mutex_t * mutex)449*5e7646d2SAndroid Build Coastguard Worker _cupsMutexUnlock(_cups_mutex_t *mutex) /* I - Mutex */
450*5e7646d2SAndroid Build Coastguard Worker {
451*5e7646d2SAndroid Build Coastguard Worker (void)mutex;
452*5e7646d2SAndroid Build Coastguard Worker }
453*5e7646d2SAndroid Build Coastguard Worker
454*5e7646d2SAndroid Build Coastguard Worker
455*5e7646d2SAndroid Build Coastguard Worker /*
456*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWInit()' - Initialize a reader/writer lock.
457*5e7646d2SAndroid Build Coastguard Worker */
458*5e7646d2SAndroid Build Coastguard Worker
459*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWInit(_cups_rwlock_t * rwlock)460*5e7646d2SAndroid Build Coastguard Worker _cupsRWInit(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
461*5e7646d2SAndroid Build Coastguard Worker {
462*5e7646d2SAndroid Build Coastguard Worker (void)rwlock;
463*5e7646d2SAndroid Build Coastguard Worker }
464*5e7646d2SAndroid Build Coastguard Worker
465*5e7646d2SAndroid Build Coastguard Worker
466*5e7646d2SAndroid Build Coastguard Worker /*
467*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWLockRead()' - Acquire a reader/writer lock for reading.
468*5e7646d2SAndroid Build Coastguard Worker */
469*5e7646d2SAndroid Build Coastguard Worker
470*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWLockRead(_cups_rwlock_t * rwlock)471*5e7646d2SAndroid Build Coastguard Worker _cupsRWLockRead(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
472*5e7646d2SAndroid Build Coastguard Worker {
473*5e7646d2SAndroid Build Coastguard Worker (void)rwlock;
474*5e7646d2SAndroid Build Coastguard Worker }
475*5e7646d2SAndroid Build Coastguard Worker
476*5e7646d2SAndroid Build Coastguard Worker
477*5e7646d2SAndroid Build Coastguard Worker /*
478*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWLockWrite()' - Acquire a reader/writer lock for writing.
479*5e7646d2SAndroid Build Coastguard Worker */
480*5e7646d2SAndroid Build Coastguard Worker
481*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWLockWrite(_cups_rwlock_t * rwlock)482*5e7646d2SAndroid Build Coastguard Worker _cupsRWLockWrite(_cups_rwlock_t *rwlock)/* I - Reader/writer lock */
483*5e7646d2SAndroid Build Coastguard Worker {
484*5e7646d2SAndroid Build Coastguard Worker (void)rwlock;
485*5e7646d2SAndroid Build Coastguard Worker }
486*5e7646d2SAndroid Build Coastguard Worker
487*5e7646d2SAndroid Build Coastguard Worker
488*5e7646d2SAndroid Build Coastguard Worker /*
489*5e7646d2SAndroid Build Coastguard Worker * '_cupsRWUnlock()' - Release a reader/writer lock.
490*5e7646d2SAndroid Build Coastguard Worker */
491*5e7646d2SAndroid Build Coastguard Worker
492*5e7646d2SAndroid Build Coastguard Worker void
_cupsRWUnlock(_cups_rwlock_t * rwlock)493*5e7646d2SAndroid Build Coastguard Worker _cupsRWUnlock(_cups_rwlock_t *rwlock) /* I - Reader/writer lock */
494*5e7646d2SAndroid Build Coastguard Worker {
495*5e7646d2SAndroid Build Coastguard Worker (void)rwlock;
496*5e7646d2SAndroid Build Coastguard Worker }
497*5e7646d2SAndroid Build Coastguard Worker
498*5e7646d2SAndroid Build Coastguard Worker
499*5e7646d2SAndroid Build Coastguard Worker /*
500*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadCancel()' - Cancel (kill) a thread.
501*5e7646d2SAndroid Build Coastguard Worker */
502*5e7646d2SAndroid Build Coastguard Worker
503*5e7646d2SAndroid Build Coastguard Worker void
_cupsThreadCancel(_cups_thread_t thread)504*5e7646d2SAndroid Build Coastguard Worker _cupsThreadCancel(_cups_thread_t thread)/* I - Thread ID */
505*5e7646d2SAndroid Build Coastguard Worker {
506*5e7646d2SAndroid Build Coastguard Worker (void)thread;
507*5e7646d2SAndroid Build Coastguard Worker }
508*5e7646d2SAndroid Build Coastguard Worker
509*5e7646d2SAndroid Build Coastguard Worker
510*5e7646d2SAndroid Build Coastguard Worker /*
511*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadCreate()' - Create a thread.
512*5e7646d2SAndroid Build Coastguard Worker */
513*5e7646d2SAndroid Build Coastguard Worker
514*5e7646d2SAndroid Build Coastguard Worker _cups_thread_t /* O - Thread ID */
_cupsThreadCreate(_cups_thread_func_t func,void * arg)515*5e7646d2SAndroid Build Coastguard Worker _cupsThreadCreate(
516*5e7646d2SAndroid Build Coastguard Worker _cups_thread_func_t func, /* I - Entry point */
517*5e7646d2SAndroid Build Coastguard Worker void *arg) /* I - Entry point context */
518*5e7646d2SAndroid Build Coastguard Worker {
519*5e7646d2SAndroid Build Coastguard Worker fputs("DEBUG: CUPS was compiled without threading support, no thread created.\n", stderr);
520*5e7646d2SAndroid Build Coastguard Worker
521*5e7646d2SAndroid Build Coastguard Worker (void)func;
522*5e7646d2SAndroid Build Coastguard Worker (void)arg;
523*5e7646d2SAndroid Build Coastguard Worker
524*5e7646d2SAndroid Build Coastguard Worker return (0);
525*5e7646d2SAndroid Build Coastguard Worker }
526*5e7646d2SAndroid Build Coastguard Worker
527*5e7646d2SAndroid Build Coastguard Worker
528*5e7646d2SAndroid Build Coastguard Worker /*
529*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadDetach()' - Tell the OS that the thread is running independently.
530*5e7646d2SAndroid Build Coastguard Worker */
531*5e7646d2SAndroid Build Coastguard Worker
532*5e7646d2SAndroid Build Coastguard Worker void
_cupsThreadDetach(_cups_thread_t thread)533*5e7646d2SAndroid Build Coastguard Worker _cupsThreadDetach(_cups_thread_t thread)/* I - Thread ID */
534*5e7646d2SAndroid Build Coastguard Worker {
535*5e7646d2SAndroid Build Coastguard Worker (void)thread;
536*5e7646d2SAndroid Build Coastguard Worker }
537*5e7646d2SAndroid Build Coastguard Worker
538*5e7646d2SAndroid Build Coastguard Worker
539*5e7646d2SAndroid Build Coastguard Worker /*
540*5e7646d2SAndroid Build Coastguard Worker * '_cupsThreadWait()' - Wait for a thread to exit.
541*5e7646d2SAndroid Build Coastguard Worker */
542*5e7646d2SAndroid Build Coastguard Worker
543*5e7646d2SAndroid Build Coastguard Worker void * /* O - Return value */
_cupsThreadWait(_cups_thread_t thread)544*5e7646d2SAndroid Build Coastguard Worker _cupsThreadWait(_cups_thread_t thread) /* I - Thread ID */
545*5e7646d2SAndroid Build Coastguard Worker {
546*5e7646d2SAndroid Build Coastguard Worker (void)thread;
547*5e7646d2SAndroid Build Coastguard Worker
548*5e7646d2SAndroid Build Coastguard Worker return (NULL);
549*5e7646d2SAndroid Build Coastguard Worker }
550*5e7646d2SAndroid Build Coastguard Worker
551*5e7646d2SAndroid Build Coastguard Worker #endif /* HAVE_PTHREAD_H */
552