10b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 20b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Copyright 2002-2008 Adobe Systems Incorporated 30b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// All Rights Reserved. 40b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// 50b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// NOTICE: Adobe permits you to use, modify, and distribute this file in 60b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// accordance with the terms of the Adobe license agreement accompanying it. 70b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 80b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 90b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Id: //mondo/dng_sdk_1_4/dng_sdk/source/dng_pthread.h#1 $ */ 100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $DateTime: 2012/05/30 13:28:51 $ */ 110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Change: 832332 $ */ 120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* $Author: tknoll $ */ 130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifndef __dng_pthread__ 170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define __dng_pthread__ 180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include "dng_flags.h" 220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#if qDNGThreadSafe 260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#if !qWinOS 300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* Try generic POSIX compile */ 340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include <errno.h> 360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include <pthread.h> 370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define dng_pthread_disassociate() 390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define dng_pthread_terminate() 400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#else 440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include <stdlib.h> 480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#if _MSC_VER >= 1600 500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Get this included so ETIMEDOUT is predefined. 520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#include <errno.h> 530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 56e95f96bb9d29978211250ee764ba78731ad316dfYujie Qin// Use the standard "timespec" struct as "dng_timespec" for VS2015 and above 57e95f96bb9d29978211250ee764ba78731ad316dfYujie Qin// from <time.h>. Define "dng_timespec" as "timespec" otherwise. 5841c8c9a5da5cc3a2474b9e4a06736e533e6eb00eFlorian Kriener#if _MSC_VER >= 1900 5941c8c9a5da5cc3a2474b9e4a06736e533e6eb00eFlorian Kriener#include <time.h> 60e95f96bb9d29978211250ee764ba78731ad316dfYujie Qin#define dng_timespec timespec 6141c8c9a5da5cc3a2474b9e4a06736e533e6eb00eFlorian Kriener#else 62e95f96bb9d29978211250ee764ba78731ad316dfYujie Qinstruct dng_timespec { 63e95f96bb9d29978211250ee764ba78731ad316dfYujie Qin long tv_sec; 64e95f96bb9d29978211250ee764ba78731ad316dfYujie Qin long tv_nsec; 65e95f96bb9d29978211250ee764ba78731ad316dfYujie Qin}; 6641c8c9a5da5cc3a2474b9e4a06736e533e6eb00eFlorian Kriener#define timespec dng_timespec 6741c8c9a5da5cc3a2474b9e4a06736e533e6eb00eFlorian Kriener#endif 6841c8c9a5da5cc3a2474b9e4a06736e533e6eb00eFlorian Kriener 690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifdef __cplusplus 700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerextern "C" 710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener{ 720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_ETIMEDOUT 60 /* Operation timed out */ 770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef unsigned long dng_pthread_t; 790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef struct dng_pthread_mutex_impl *dng_pthread_mutex_t; 810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef struct dng_pthread_cond_impl *dng_pthread_cond_t; 820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef unsigned long dng_pthread_key_t; 830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_PTHREAD_MUTEX_INITIALIZER ((struct dng_pthread_mutex_impl *)-1) 860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_PTHREAD_COND_INITIALIZER ((struct dng_pthread_cond_impl *)-1) 870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerstruct _dng_pthread_once_t { 890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener int inited; 900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener long semaphore; 910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener}; 920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef struct _dng_pthread_once_t dng_pthread_once_t; 940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_PTHREAD_ONCE_INIT { 0, -1 } 950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define dng_pthread_equal(t1, t2) ((t1) == (t2)) 970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef struct dng_pthread_attr_impl *dng_pthread_attr_t; 990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_attr_init(dng_pthread_attr_t *attr); 1010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_attr_destroy(dng_pthread_attr_t *attr); 1020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_attr_setstacksize(dng_pthread_attr_t *attr, size_t stacksize); 1040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_attr_getstacksize(const dng_pthread_attr_t *attr, size_t *stacksize); 1050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_create(dng_pthread_t *thread, const dng_pthread_attr_t * /* attrs */, void * (*func)(void *), void *arg); 1070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_detach(dng_pthread_t thread); 1080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_join(dng_pthread_t thread, void **result); 1090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerdng_pthread_t dng_pthread_self(); 1100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_pthread_exit(void *result); 1110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define DNG_PTHREAD_MUTEX_RECURSIVE 0 1130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef unsigned long dng_pthread_mutexattr_t; 1140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_mutexattr_init(dng_pthread_mutexattr_t *mutexattr); 1160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_mutexattr_settype(dng_pthread_mutexattr_t *mutexattr, int /*the options*/); 1170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_mutex_init(dng_pthread_mutex_t *mutex, void * /* attrs */); 1190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_mutex_destroy(dng_pthread_mutex_t *mutex); 1200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_mutex_lock(dng_pthread_mutex_t *mutex); 1210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_mutex_unlock(dng_pthread_mutex_t *mutex); 1220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_cond_init(dng_pthread_cond_t *cond, void * /* attrs */); 1240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_cond_destroy(dng_pthread_cond_t *cond); 1250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_cond_wait(dng_pthread_cond_t *cond, dng_pthread_mutex_t *mutex); 1260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_cond_timedwait(dng_pthread_cond_t *cond, dng_pthread_mutex_t *mutex, struct dng_timespec *latest_time); 1270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_cond_signal(dng_pthread_cond_t *cond); 1280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_cond_broadcast(dng_pthread_cond_t *cond); 1290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_once(dng_pthread_once_t *once, void (*init_func)()); 1310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_key_create(dng_pthread_key_t * key, void (*destructor) (void *)); 1330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_key_delete(dng_pthread_key_t key); 1340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_setspecific(dng_pthread_key_t key, const void *value); 1350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid *dng_pthread_getspecific(dng_pthread_key_t key); 1360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef struct dng_pthread_rwlock_impl *dng_pthread_rwlock_t; 1380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef void *pthread_rwlockattr_t; 1390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_destroy(dng_pthread_rwlock_t * rwlock); 1410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_init(dng_pthread_rwlock_t * rwlock, const pthread_rwlockattr_t * attrs); 1420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_rdlock(dng_pthread_rwlock_t * rwlock); 1430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_tryrdlock(dng_pthread_rwlock_t * rwlock); 1440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_trywrlock(dng_pthread_rwlock_t * rwlock); 1450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_unlock(dng_pthread_rwlock_t * rwlock); 1460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_wrlock(dng_pthread_rwlock_t * rwlock); 1470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef struct dng_pthread_rwlock_impl *dng_pthread_rwlock_t; 1490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienertypedef void *pthread_rwlockattr_t; 1500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_destroy(dng_pthread_rwlock_t * rwlock); 1520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_init(dng_pthread_rwlock_t * rwlock, const pthread_rwlockattr_t * attrs); 1530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_rdlock(dng_pthread_rwlock_t * rwlock); 1540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_tryrdlock(dng_pthread_rwlock_t * rwlock); 1550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_trywrlock(dng_pthread_rwlock_t * rwlock); 1560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_unlock(dng_pthread_rwlock_t * rwlock); 1570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_rwlock_wrlock(dng_pthread_rwlock_t * rwlock); 1580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// dng_pthread may maintain per-thread global state. This routine frees that global state. 1600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// there is no need to call this for threads created by dng_pthread and one can call 1610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// dng_pthread routines of a thread after dng_pthread_disassociate as the global state will 1620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// be recreated as necessary. However dng_pthread_disassociate will need to be called again 1630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// and there is a slight performance cost. Do not call this routine while holding a mutex, etc. 1640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_pthread_disassociate(); 1650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienervoid dng_pthread_terminate(); 1670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 1690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// Map symbols back to plain pthread names. This whole mechanism is so the DNG pthreads library 1710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// symbols do not collide with another pthread emulation library 1720b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// that may be in use in the same linked entity. However if that is the case, it would be far better 1730b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener// to have the DNG code use the same pthread library as the rest of the code. 1740b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1750b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_t dng_pthread_t 1760b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_mutex_t dng_pthread_mutex_t 1770b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_cond_t dng_pthread_cond_t 1780b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_once_t dng_pthread_once_t 1790b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_key_t dng_pthread_key_t 1800b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1810b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#undef PTHREAD_MUTEX_INITIALIZER 1820b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define PTHREAD_MUTEX_INITIALIZER DNG_PTHREAD_MUTEX_INITIALIZER 1830b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#undef PTHREAD_COND_INITIALIZER 1840b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define PTHREAD_COND_INITIALIZER DNG_PTHREAD_COND_INITIALIZER 1850b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1860b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#undef PTHREAD_ONCE_INIT 1870b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define PTHREAD_ONCE_INIT DNG_PTHREAD_ONCE_INIT 1880b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1890b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/* If it is defined on Windows, it probably has the wrong value... */ 1900b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#if defined(WIN32) || !defined(ETIMEDOUT) 1910b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#undef ETIMEDOUT 1920b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define ETIMEDOUT DNG_ETIMEDOUT 1930b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 1940b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1950b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_equal dng_pthread_equal 1960b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1970b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_attr_t dng_pthread_attr_t 1980b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 1990b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_attr_init dng_pthread_attr_init 2000b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_attr_destroy dng_pthread_attr_destroy 2010b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2020b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_attr_setstacksize dng_pthread_attr_setstacksize 2030b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_attr_getstacksize dng_pthread_attr_getstacksize 2040b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2050b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_create dng_pthread_create 2060b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_detach dng_pthread_detach 2070b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_join dng_pthread_join 2080b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_self dng_pthread_self 2090b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_exit dng_pthread_exit 2100b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2110b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_mutex_init dng_pthread_mutex_init 2120b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_mutex_destroy dng_pthread_mutex_destroy 2130b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_mutex_lock dng_pthread_mutex_lock 2140b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_mutex_unlock dng_pthread_mutex_unlock 2150b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2160b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_cond_init dng_pthread_cond_init 2170b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_cond_destroy dng_pthread_cond_destroy 2180b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_cond_wait dng_pthread_cond_wait 2190b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_cond_timedwait dng_pthread_cond_timedwait 2200b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_cond_signal dng_pthread_cond_signal 2210b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_cond_broadcast dng_pthread_cond_broadcast 2220b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2230b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_once dng_pthread_once 2240b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2250b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_key_create dng_pthread_key_create 2260b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_key_delete dng_pthread_key_delete 2270b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_setspecific dng_pthread_setspecific 2280b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_getspecific dng_pthread_getspecific 2290b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2300b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_t dng_pthread_rwlock_t 2310b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2320b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_destroy dng_pthread_rwlock_destroy 2330b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_init dng_pthread_rwlock_init 2340b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_rdlock dng_pthread_rwlock_rdlock 2350b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_tryrdlock dng_pthread_rwlock_tryrdlock 2360b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_trywrlock dng_pthread_rwlock_trywrlock 2370b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_unlock dng_pthread_rwlock_unlock 2380b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#define pthread_rwlock_wrlock dng_pthread_rwlock_wrlock 2390b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2400b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2410b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2420b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifdef __cplusplus 2430b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener} 2440b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 2450b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2460b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2470b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2480b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 2490b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2500b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2510b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2520b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifdef __cplusplus 2530b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerextern "C" 2540b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener{ 2550b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 2560b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2570b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Krienerint dng_pthread_now (struct timespec *now); 2580b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2590b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#ifdef __cplusplus 2600b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener} 2610b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 2620b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2630b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2640b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2650b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif // qDNGThreadSafe 2660b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2670b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 2680b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2690b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener#endif 2700b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener 2710b098b759cf9a2a8659babaf8c3b74e1b48ca604Florian Kriener/*****************************************************************************/ 272