| #ifndef THREAD_COMPAT_H | 
 | #define THREAD_COMPAT_H | 
 |  | 
 | #ifndef NO_PTHREADS | 
 | #include <pthread.h> | 
 |  | 
 | #define HAVE_THREADS 1 | 
 |  | 
 | #else | 
 |  | 
 | #define HAVE_THREADS 0 | 
 |  | 
 | /* | 
 |  * macros instead of typedefs because pthread definitions may have | 
 |  * been pulled in by some system dependencies even though the user | 
 |  * wants to disable pthread. | 
 |  */ | 
 | #define pthread_t int | 
 | #define pthread_mutex_t int | 
 | #define pthread_cond_t int | 
 | #define pthread_key_t int | 
 |  | 
 | #define pthread_mutex_init(mutex, attr) dummy_pthread_init(mutex) | 
 | #define pthread_mutex_lock(mutex) | 
 | #define pthread_mutex_unlock(mutex) | 
 | #define pthread_mutex_destroy(mutex) | 
 |  | 
 | #define pthread_cond_init(cond, attr) dummy_pthread_init(cond) | 
 | #define pthread_cond_wait(cond, mutex) | 
 | #define pthread_cond_signal(cond) | 
 | #define pthread_cond_broadcast(cond) | 
 | #define pthread_cond_destroy(cond) | 
 |  | 
 | #define pthread_key_create(key, attr) dummy_pthread_init(key) | 
 | #define pthread_key_delete(key) | 
 |  | 
 | #define pthread_create(thread, attr, fn, data) \ | 
 | 	dummy_pthread_create(thread, attr, fn, data) | 
 | #define pthread_join(thread, retval) \ | 
 | 	dummy_pthread_join(thread, retval) | 
 |  | 
 | #define pthread_setspecific(key, data) | 
 | #define pthread_getspecific(key) NULL | 
 |  | 
 | int dummy_pthread_create(pthread_t *pthread, const void *attr, | 
 | 			 void *(*fn)(void *), void *data); | 
 | int dummy_pthread_join(pthread_t pthread, void **retval); | 
 |  | 
 | int dummy_pthread_init(void *); | 
 |  | 
 | #endif | 
 |  | 
 | int online_cpus(void); | 
 | int init_recursive_mutex(pthread_mutex_t*); | 
 |  | 
 |  | 
 | #endif /* THREAD_COMPAT_H */ |