xref: /aosp_15_r20/external/libxml2/include/private/threads.h (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1*7c568831SAndroid Build Coastguard Worker #ifndef XML_THREADS_H_PRIVATE__
2*7c568831SAndroid Build Coastguard Worker #define XML_THREADS_H_PRIVATE__
3*7c568831SAndroid Build Coastguard Worker 
4*7c568831SAndroid Build Coastguard Worker #include <libxml/threads.h>
5*7c568831SAndroid Build Coastguard Worker 
6*7c568831SAndroid Build Coastguard Worker #ifdef LIBXML_THREAD_ENABLED
7*7c568831SAndroid Build Coastguard Worker   #ifdef _WIN32
8*7c568831SAndroid Build Coastguard Worker     #define WIN32_LEAN_AND_MEAN
9*7c568831SAndroid Build Coastguard Worker     #ifdef _WIN32_WINNT
10*7c568831SAndroid Build Coastguard Worker       #undef _WIN32_WINNT
11*7c568831SAndroid Build Coastguard Worker     #endif
12*7c568831SAndroid Build Coastguard Worker     #define _WIN32_WINNT 0x0600
13*7c568831SAndroid Build Coastguard Worker     #include <windows.h>
14*7c568831SAndroid Build Coastguard Worker     #define HAVE_WIN32_THREADS
15*7c568831SAndroid Build Coastguard Worker   #else
16*7c568831SAndroid Build Coastguard Worker     #include <pthread.h>
17*7c568831SAndroid Build Coastguard Worker     #define HAVE_POSIX_THREADS
18*7c568831SAndroid Build Coastguard Worker   #endif
19*7c568831SAndroid Build Coastguard Worker #endif
20*7c568831SAndroid Build Coastguard Worker 
21*7c568831SAndroid Build Coastguard Worker /*
22*7c568831SAndroid Build Coastguard Worker  * xmlMutex are a simple mutual exception locks
23*7c568831SAndroid Build Coastguard Worker  */
24*7c568831SAndroid Build Coastguard Worker struct _xmlMutex {
25*7c568831SAndroid Build Coastguard Worker #ifdef HAVE_POSIX_THREADS
26*7c568831SAndroid Build Coastguard Worker     pthread_mutex_t lock;
27*7c568831SAndroid Build Coastguard Worker #elif defined HAVE_WIN32_THREADS
28*7c568831SAndroid Build Coastguard Worker     CRITICAL_SECTION cs;
29*7c568831SAndroid Build Coastguard Worker #else
30*7c568831SAndroid Build Coastguard Worker     int empty;
31*7c568831SAndroid Build Coastguard Worker #endif
32*7c568831SAndroid Build Coastguard Worker };
33*7c568831SAndroid Build Coastguard Worker 
34*7c568831SAndroid Build Coastguard Worker /*
35*7c568831SAndroid Build Coastguard Worker  * xmlRMutex are reentrant mutual exception locks
36*7c568831SAndroid Build Coastguard Worker  */
37*7c568831SAndroid Build Coastguard Worker struct _xmlRMutex {
38*7c568831SAndroid Build Coastguard Worker #ifdef HAVE_POSIX_THREADS
39*7c568831SAndroid Build Coastguard Worker     pthread_mutex_t lock;
40*7c568831SAndroid Build Coastguard Worker     unsigned int held;
41*7c568831SAndroid Build Coastguard Worker     unsigned int waiters;
42*7c568831SAndroid Build Coastguard Worker     pthread_t tid;
43*7c568831SAndroid Build Coastguard Worker     pthread_cond_t cv;
44*7c568831SAndroid Build Coastguard Worker #elif defined HAVE_WIN32_THREADS
45*7c568831SAndroid Build Coastguard Worker     CRITICAL_SECTION cs;
46*7c568831SAndroid Build Coastguard Worker #else
47*7c568831SAndroid Build Coastguard Worker     int empty;
48*7c568831SAndroid Build Coastguard Worker #endif
49*7c568831SAndroid Build Coastguard Worker };
50*7c568831SAndroid Build Coastguard Worker 
51*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void
52*7c568831SAndroid Build Coastguard Worker xmlInitMutex(xmlMutexPtr mutex);
53*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void
54*7c568831SAndroid Build Coastguard Worker xmlCleanupMutex(xmlMutexPtr mutex);
55*7c568831SAndroid Build Coastguard Worker 
56*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void
57*7c568831SAndroid Build Coastguard Worker xmlInitRMutex(xmlRMutexPtr mutex);
58*7c568831SAndroid Build Coastguard Worker XML_HIDDEN void
59*7c568831SAndroid Build Coastguard Worker xmlCleanupRMutex(xmlRMutexPtr mutex);
60*7c568831SAndroid Build Coastguard Worker 
61*7c568831SAndroid Build Coastguard Worker #endif /* XML_THREADS_H_PRIVATE__ */
62