xref: /aosp_15_r20/external/dng_sdk/source/dng_pthread.h (revision fd1fabb72dbdf09ea7034f531e6f8e9f57334c8d)
1*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
2*fd1fabb7SAndroid Build Coastguard Worker // Copyright 2002-2008 Adobe Systems Incorporated
3*fd1fabb7SAndroid Build Coastguard Worker // All Rights Reserved.
4*fd1fabb7SAndroid Build Coastguard Worker //
5*fd1fabb7SAndroid Build Coastguard Worker // NOTICE:  Adobe permits you to use, modify, and distribute this file in
6*fd1fabb7SAndroid Build Coastguard Worker // accordance with the terms of the Adobe license agreement accompanying it.
7*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
8*fd1fabb7SAndroid Build Coastguard Worker 
9*fd1fabb7SAndroid Build Coastguard Worker /* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_pthread.h#1 $ */
10*fd1fabb7SAndroid Build Coastguard Worker /* $DateTime: 2012/05/30 13:28:51 $ */
11*fd1fabb7SAndroid Build Coastguard Worker /* $Change: 832332 $ */
12*fd1fabb7SAndroid Build Coastguard Worker /* $Author: tknoll $ */
13*fd1fabb7SAndroid Build Coastguard Worker 
14*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
15*fd1fabb7SAndroid Build Coastguard Worker 
16*fd1fabb7SAndroid Build Coastguard Worker #ifndef __dng_pthread__
17*fd1fabb7SAndroid Build Coastguard Worker #define __dng_pthread__
18*fd1fabb7SAndroid Build Coastguard Worker 
19*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
20*fd1fabb7SAndroid Build Coastguard Worker 
21*fd1fabb7SAndroid Build Coastguard Worker #include "dng_flags.h"
22*fd1fabb7SAndroid Build Coastguard Worker 
23*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
24*fd1fabb7SAndroid Build Coastguard Worker 
25*fd1fabb7SAndroid Build Coastguard Worker #if qDNGThreadSafe
26*fd1fabb7SAndroid Build Coastguard Worker 
27*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
28*fd1fabb7SAndroid Build Coastguard Worker 
29*fd1fabb7SAndroid Build Coastguard Worker #if !qWinOS
30*fd1fabb7SAndroid Build Coastguard Worker 
31*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
32*fd1fabb7SAndroid Build Coastguard Worker 
33*fd1fabb7SAndroid Build Coastguard Worker /* Try generic POSIX compile */
34*fd1fabb7SAndroid Build Coastguard Worker 
35*fd1fabb7SAndroid Build Coastguard Worker #include <errno.h>
36*fd1fabb7SAndroid Build Coastguard Worker #include <pthread.h>
37*fd1fabb7SAndroid Build Coastguard Worker 
38*fd1fabb7SAndroid Build Coastguard Worker #define dng_pthread_disassociate()
39*fd1fabb7SAndroid Build Coastguard Worker #define dng_pthread_terminate()
40*fd1fabb7SAndroid Build Coastguard Worker 
41*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
42*fd1fabb7SAndroid Build Coastguard Worker 
43*fd1fabb7SAndroid Build Coastguard Worker #else
44*fd1fabb7SAndroid Build Coastguard Worker 
45*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
46*fd1fabb7SAndroid Build Coastguard Worker 
47*fd1fabb7SAndroid Build Coastguard Worker #include <stdlib.h>
48*fd1fabb7SAndroid Build Coastguard Worker 
49*fd1fabb7SAndroid Build Coastguard Worker #if _MSC_VER >= 1600
50*fd1fabb7SAndroid Build Coastguard Worker 
51*fd1fabb7SAndroid Build Coastguard Worker // Get this included so ETIMEDOUT is predefined.
52*fd1fabb7SAndroid Build Coastguard Worker #include <errno.h>
53*fd1fabb7SAndroid Build Coastguard Worker 
54*fd1fabb7SAndroid Build Coastguard Worker #endif
55*fd1fabb7SAndroid Build Coastguard Worker 
56*fd1fabb7SAndroid Build Coastguard Worker #include <time.h>
57*fd1fabb7SAndroid Build Coastguard Worker #define dng_timespec timespec
58*fd1fabb7SAndroid Build Coastguard Worker 
59*fd1fabb7SAndroid Build Coastguard Worker #ifdef __cplusplus
60*fd1fabb7SAndroid Build Coastguard Worker extern "C"
61*fd1fabb7SAndroid Build Coastguard Worker {
62*fd1fabb7SAndroid Build Coastguard Worker #endif
63*fd1fabb7SAndroid Build Coastguard Worker 
64*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
65*fd1fabb7SAndroid Build Coastguard Worker 
66*fd1fabb7SAndroid Build Coastguard Worker #define DNG_ETIMEDOUT       60              /* Operation timed out */
67*fd1fabb7SAndroid Build Coastguard Worker 
68*fd1fabb7SAndroid Build Coastguard Worker typedef unsigned long dng_pthread_t;
69*fd1fabb7SAndroid Build Coastguard Worker 
70*fd1fabb7SAndroid Build Coastguard Worker typedef struct dng_pthread_mutex_impl *dng_pthread_mutex_t;
71*fd1fabb7SAndroid Build Coastguard Worker typedef struct dng_pthread_cond_impl *dng_pthread_cond_t;
72*fd1fabb7SAndroid Build Coastguard Worker typedef unsigned long dng_pthread_key_t;
73*fd1fabb7SAndroid Build Coastguard Worker 
74*fd1fabb7SAndroid Build Coastguard Worker 
75*fd1fabb7SAndroid Build Coastguard Worker #define DNG_PTHREAD_MUTEX_INITIALIZER ((struct dng_pthread_mutex_impl *)-1)
76*fd1fabb7SAndroid Build Coastguard Worker #define DNG_PTHREAD_COND_INITIALIZER ((struct dng_pthread_cond_impl *)-1)
77*fd1fabb7SAndroid Build Coastguard Worker 
78*fd1fabb7SAndroid Build Coastguard Worker struct _dng_pthread_once_t {
79*fd1fabb7SAndroid Build Coastguard Worker 	int inited;
80*fd1fabb7SAndroid Build Coastguard Worker 	long semaphore;
81*fd1fabb7SAndroid Build Coastguard Worker };
82*fd1fabb7SAndroid Build Coastguard Worker 
83*fd1fabb7SAndroid Build Coastguard Worker typedef struct _dng_pthread_once_t dng_pthread_once_t;
84*fd1fabb7SAndroid Build Coastguard Worker #define DNG_PTHREAD_ONCE_INIT { 0, -1 }
85*fd1fabb7SAndroid Build Coastguard Worker 
86*fd1fabb7SAndroid Build Coastguard Worker #define dng_pthread_equal(t1, t2) ((t1) == (t2))
87*fd1fabb7SAndroid Build Coastguard Worker 
88*fd1fabb7SAndroid Build Coastguard Worker typedef struct dng_pthread_attr_impl *dng_pthread_attr_t;
89*fd1fabb7SAndroid Build Coastguard Worker 
90*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_attr_init(dng_pthread_attr_t *attr);
91*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_attr_destroy(dng_pthread_attr_t *attr);
92*fd1fabb7SAndroid Build Coastguard Worker 
93*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_attr_setstacksize(dng_pthread_attr_t *attr, size_t stacksize);
94*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_attr_getstacksize(const dng_pthread_attr_t *attr, size_t *stacksize);
95*fd1fabb7SAndroid Build Coastguard Worker 
96*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_create(dng_pthread_t *thread, const dng_pthread_attr_t * /* attrs */, void * (*func)(void *), void *arg);
97*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_detach(dng_pthread_t thread);
98*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_join(dng_pthread_t thread, void **result);
99*fd1fabb7SAndroid Build Coastguard Worker dng_pthread_t dng_pthread_self();
100*fd1fabb7SAndroid Build Coastguard Worker void dng_pthread_exit(void *result);
101*fd1fabb7SAndroid Build Coastguard Worker 
102*fd1fabb7SAndroid Build Coastguard Worker #define DNG_PTHREAD_MUTEX_RECURSIVE 0
103*fd1fabb7SAndroid Build Coastguard Worker typedef unsigned long dng_pthread_mutexattr_t;
104*fd1fabb7SAndroid Build Coastguard Worker 
105*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_mutexattr_init(dng_pthread_mutexattr_t *mutexattr);
106*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_mutexattr_settype(dng_pthread_mutexattr_t *mutexattr, int /*the options*/);
107*fd1fabb7SAndroid Build Coastguard Worker 
108*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_mutex_init(dng_pthread_mutex_t *mutex, void * /* attrs */);
109*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_mutex_destroy(dng_pthread_mutex_t *mutex);
110*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_mutex_lock(dng_pthread_mutex_t *mutex);
111*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_mutex_unlock(dng_pthread_mutex_t *mutex);
112*fd1fabb7SAndroid Build Coastguard Worker 
113*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_cond_init(dng_pthread_cond_t *cond, void * /* attrs */);
114*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_cond_destroy(dng_pthread_cond_t *cond);
115*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_cond_wait(dng_pthread_cond_t *cond, dng_pthread_mutex_t *mutex);
116*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_cond_timedwait(dng_pthread_cond_t *cond, dng_pthread_mutex_t *mutex, struct dng_timespec *latest_time);
117*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_cond_signal(dng_pthread_cond_t *cond);
118*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_cond_broadcast(dng_pthread_cond_t *cond);
119*fd1fabb7SAndroid Build Coastguard Worker 
120*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_once(dng_pthread_once_t *once, void (*init_func)());
121*fd1fabb7SAndroid Build Coastguard Worker 
122*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_key_create(dng_pthread_key_t * key, void (*destructor) (void *));
123*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_key_delete(dng_pthread_key_t key);
124*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_setspecific(dng_pthread_key_t key, const void *value);
125*fd1fabb7SAndroid Build Coastguard Worker void *dng_pthread_getspecific(dng_pthread_key_t key);
126*fd1fabb7SAndroid Build Coastguard Worker 
127*fd1fabb7SAndroid Build Coastguard Worker typedef struct dng_pthread_rwlock_impl *dng_pthread_rwlock_t;
128*fd1fabb7SAndroid Build Coastguard Worker typedef void *pthread_rwlockattr_t;
129*fd1fabb7SAndroid Build Coastguard Worker 
130*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_destroy(dng_pthread_rwlock_t * rwlock);
131*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_init(dng_pthread_rwlock_t * rwlock, const pthread_rwlockattr_t * attrs);
132*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_rdlock(dng_pthread_rwlock_t * rwlock);
133*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_tryrdlock(dng_pthread_rwlock_t * rwlock);
134*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_trywrlock(dng_pthread_rwlock_t * rwlock);
135*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_unlock(dng_pthread_rwlock_t * rwlock);
136*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_wrlock(dng_pthread_rwlock_t * rwlock);
137*fd1fabb7SAndroid Build Coastguard Worker 
138*fd1fabb7SAndroid Build Coastguard Worker typedef struct dng_pthread_rwlock_impl *dng_pthread_rwlock_t;
139*fd1fabb7SAndroid Build Coastguard Worker typedef void *pthread_rwlockattr_t;
140*fd1fabb7SAndroid Build Coastguard Worker 
141*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_destroy(dng_pthread_rwlock_t * rwlock);
142*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_init(dng_pthread_rwlock_t * rwlock, const pthread_rwlockattr_t * attrs);
143*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_rdlock(dng_pthread_rwlock_t * rwlock);
144*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_tryrdlock(dng_pthread_rwlock_t * rwlock);
145*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_trywrlock(dng_pthread_rwlock_t * rwlock);
146*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_unlock(dng_pthread_rwlock_t * rwlock);
147*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_rwlock_wrlock(dng_pthread_rwlock_t * rwlock);
148*fd1fabb7SAndroid Build Coastguard Worker 
149*fd1fabb7SAndroid Build Coastguard Worker // dng_pthread may maintain per-thread global state. This routine frees that global state.
150*fd1fabb7SAndroid Build Coastguard Worker // there is no need to call this for threads created by dng_pthread and one can call
151*fd1fabb7SAndroid Build Coastguard Worker // dng_pthread routines of a thread after dng_pthread_disassociate as the global state will
152*fd1fabb7SAndroid Build Coastguard Worker // be recreated as necessary. However dng_pthread_disassociate will need to be called again
153*fd1fabb7SAndroid Build Coastguard Worker // and there is a slight performance cost. Do not call this routine while holding a mutex, etc.
154*fd1fabb7SAndroid Build Coastguard Worker void dng_pthread_disassociate();
155*fd1fabb7SAndroid Build Coastguard Worker 
156*fd1fabb7SAndroid Build Coastguard Worker void dng_pthread_terminate();
157*fd1fabb7SAndroid Build Coastguard Worker 
158*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
159*fd1fabb7SAndroid Build Coastguard Worker 
160*fd1fabb7SAndroid Build Coastguard Worker // Map symbols back to plain pthread names. This whole mechanism is so the DNG pthreads library
161*fd1fabb7SAndroid Build Coastguard Worker // symbols do not collide with another pthread emulation library
162*fd1fabb7SAndroid Build Coastguard Worker // that may be in use in the same linked entity. However if that is the case, it would be far better
163*fd1fabb7SAndroid Build Coastguard Worker // to have the DNG code use the same pthread library as the rest of the code.
164*fd1fabb7SAndroid Build Coastguard Worker 
165*fd1fabb7SAndroid Build Coastguard Worker #define pthread_t dng_pthread_t
166*fd1fabb7SAndroid Build Coastguard Worker #define pthread_mutex_t dng_pthread_mutex_t
167*fd1fabb7SAndroid Build Coastguard Worker #define pthread_cond_t dng_pthread_cond_t
168*fd1fabb7SAndroid Build Coastguard Worker #define pthread_once_t dng_pthread_once_t
169*fd1fabb7SAndroid Build Coastguard Worker #define pthread_key_t dng_pthread_key_t
170*fd1fabb7SAndroid Build Coastguard Worker 
171*fd1fabb7SAndroid Build Coastguard Worker #undef PTHREAD_MUTEX_INITIALIZER
172*fd1fabb7SAndroid Build Coastguard Worker #define PTHREAD_MUTEX_INITIALIZER DNG_PTHREAD_MUTEX_INITIALIZER
173*fd1fabb7SAndroid Build Coastguard Worker #undef PTHREAD_COND_INITIALIZER
174*fd1fabb7SAndroid Build Coastguard Worker #define PTHREAD_COND_INITIALIZER DNG_PTHREAD_COND_INITIALIZER
175*fd1fabb7SAndroid Build Coastguard Worker 
176*fd1fabb7SAndroid Build Coastguard Worker #undef PTHREAD_ONCE_INIT
177*fd1fabb7SAndroid Build Coastguard Worker #define PTHREAD_ONCE_INIT DNG_PTHREAD_ONCE_INIT
178*fd1fabb7SAndroid Build Coastguard Worker 
179*fd1fabb7SAndroid Build Coastguard Worker /* If it is defined on Windows, it probably has the wrong value... */
180*fd1fabb7SAndroid Build Coastguard Worker #if defined(WIN32) || !defined(ETIMEDOUT)
181*fd1fabb7SAndroid Build Coastguard Worker #undef ETIMEDOUT
182*fd1fabb7SAndroid Build Coastguard Worker #define ETIMEDOUT DNG_ETIMEDOUT
183*fd1fabb7SAndroid Build Coastguard Worker #endif
184*fd1fabb7SAndroid Build Coastguard Worker 
185*fd1fabb7SAndroid Build Coastguard Worker #define pthread_equal dng_pthread_equal
186*fd1fabb7SAndroid Build Coastguard Worker 
187*fd1fabb7SAndroid Build Coastguard Worker #define pthread_attr_t dng_pthread_attr_t
188*fd1fabb7SAndroid Build Coastguard Worker 
189*fd1fabb7SAndroid Build Coastguard Worker #define pthread_attr_init dng_pthread_attr_init
190*fd1fabb7SAndroid Build Coastguard Worker #define pthread_attr_destroy dng_pthread_attr_destroy
191*fd1fabb7SAndroid Build Coastguard Worker 
192*fd1fabb7SAndroid Build Coastguard Worker #define pthread_attr_setstacksize dng_pthread_attr_setstacksize
193*fd1fabb7SAndroid Build Coastguard Worker #define pthread_attr_getstacksize dng_pthread_attr_getstacksize
194*fd1fabb7SAndroid Build Coastguard Worker 
195*fd1fabb7SAndroid Build Coastguard Worker #define pthread_create dng_pthread_create
196*fd1fabb7SAndroid Build Coastguard Worker #define pthread_detach dng_pthread_detach
197*fd1fabb7SAndroid Build Coastguard Worker #define pthread_join dng_pthread_join
198*fd1fabb7SAndroid Build Coastguard Worker #define pthread_self dng_pthread_self
199*fd1fabb7SAndroid Build Coastguard Worker #define pthread_exit dng_pthread_exit
200*fd1fabb7SAndroid Build Coastguard Worker 
201*fd1fabb7SAndroid Build Coastguard Worker #define pthread_mutex_init dng_pthread_mutex_init
202*fd1fabb7SAndroid Build Coastguard Worker #define pthread_mutex_destroy dng_pthread_mutex_destroy
203*fd1fabb7SAndroid Build Coastguard Worker #define pthread_mutex_lock dng_pthread_mutex_lock
204*fd1fabb7SAndroid Build Coastguard Worker #define pthread_mutex_unlock dng_pthread_mutex_unlock
205*fd1fabb7SAndroid Build Coastguard Worker 
206*fd1fabb7SAndroid Build Coastguard Worker #define pthread_cond_init dng_pthread_cond_init
207*fd1fabb7SAndroid Build Coastguard Worker #define pthread_cond_destroy dng_pthread_cond_destroy
208*fd1fabb7SAndroid Build Coastguard Worker #define pthread_cond_wait dng_pthread_cond_wait
209*fd1fabb7SAndroid Build Coastguard Worker #define pthread_cond_timedwait dng_pthread_cond_timedwait
210*fd1fabb7SAndroid Build Coastguard Worker #define pthread_cond_signal dng_pthread_cond_signal
211*fd1fabb7SAndroid Build Coastguard Worker #define pthread_cond_broadcast dng_pthread_cond_broadcast
212*fd1fabb7SAndroid Build Coastguard Worker 
213*fd1fabb7SAndroid Build Coastguard Worker #define pthread_once dng_pthread_once
214*fd1fabb7SAndroid Build Coastguard Worker 
215*fd1fabb7SAndroid Build Coastguard Worker #define pthread_key_create dng_pthread_key_create
216*fd1fabb7SAndroid Build Coastguard Worker #define pthread_key_delete dng_pthread_key_delete
217*fd1fabb7SAndroid Build Coastguard Worker #define pthread_setspecific dng_pthread_setspecific
218*fd1fabb7SAndroid Build Coastguard Worker #define pthread_getspecific dng_pthread_getspecific
219*fd1fabb7SAndroid Build Coastguard Worker 
220*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_t dng_pthread_rwlock_t
221*fd1fabb7SAndroid Build Coastguard Worker 
222*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_destroy dng_pthread_rwlock_destroy
223*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_init dng_pthread_rwlock_init
224*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_rdlock dng_pthread_rwlock_rdlock
225*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_tryrdlock dng_pthread_rwlock_tryrdlock
226*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_trywrlock dng_pthread_rwlock_trywrlock
227*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_unlock dng_pthread_rwlock_unlock
228*fd1fabb7SAndroid Build Coastguard Worker #define pthread_rwlock_wrlock dng_pthread_rwlock_wrlock
229*fd1fabb7SAndroid Build Coastguard Worker 
230*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
231*fd1fabb7SAndroid Build Coastguard Worker 
232*fd1fabb7SAndroid Build Coastguard Worker #ifdef __cplusplus
233*fd1fabb7SAndroid Build Coastguard Worker }
234*fd1fabb7SAndroid Build Coastguard Worker #endif
235*fd1fabb7SAndroid Build Coastguard Worker 
236*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
237*fd1fabb7SAndroid Build Coastguard Worker 
238*fd1fabb7SAndroid Build Coastguard Worker #endif
239*fd1fabb7SAndroid Build Coastguard Worker 
240*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
241*fd1fabb7SAndroid Build Coastguard Worker 
242*fd1fabb7SAndroid Build Coastguard Worker #ifdef __cplusplus
243*fd1fabb7SAndroid Build Coastguard Worker extern "C"
244*fd1fabb7SAndroid Build Coastguard Worker {
245*fd1fabb7SAndroid Build Coastguard Worker #endif
246*fd1fabb7SAndroid Build Coastguard Worker 
247*fd1fabb7SAndroid Build Coastguard Worker int dng_pthread_now (struct timespec *now);
248*fd1fabb7SAndroid Build Coastguard Worker 
249*fd1fabb7SAndroid Build Coastguard Worker #ifdef __cplusplus
250*fd1fabb7SAndroid Build Coastguard Worker }
251*fd1fabb7SAndroid Build Coastguard Worker #endif
252*fd1fabb7SAndroid Build Coastguard Worker 
253*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
254*fd1fabb7SAndroid Build Coastguard Worker 
255*fd1fabb7SAndroid Build Coastguard Worker #endif // qDNGThreadSafe
256*fd1fabb7SAndroid Build Coastguard Worker 
257*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
258*fd1fabb7SAndroid Build Coastguard Worker 
259*fd1fabb7SAndroid Build Coastguard Worker #endif
260*fd1fabb7SAndroid Build Coastguard Worker 
261*fd1fabb7SAndroid Build Coastguard Worker /*****************************************************************************/
262