42 #if defined(MHD_USE_W32_THREADS)
43 # define MHD_W32_MUTEX_ 1
44 # ifndef WIN32_LEAN_AND_MEAN
45 # define WIN32_LEAN_AND_MEAN 1
48 #elif defined(HAVE_PTHREAD_H) && defined(MHD_USE_POSIX_THREADS)
49 # define MHD_PTHREAD_MUTEX_ 1
52 # define HAVE_CONFIG_H 1
54 # error No base mutex API is available.
61 # define MHD_PANIC(msg) do { fprintf (stderr, \
62 "Abnormal termination at %d line in file %s: %s\n", \
63 (int) __LINE__, __FILE__, msg); abort (); \
67 #if defined(MHD_PTHREAD_MUTEX_)
68 typedef pthread_mutex_t MHD_mutex_;
69 #elif defined(MHD_W32_MUTEX_)
70 typedef CRITICAL_SECTION MHD_mutex_;
73 #if defined(MHD_PTHREAD_MUTEX_)
79 #define MHD_mutex_init_(pmutex) (! (pthread_mutex_init ((pmutex), NULL)))
80 #elif defined(MHD_W32_MUTEX_)
86 #define MHD_mutex_init_(pmutex) (InitializeCriticalSectionAndSpinCount ( \
90 #if defined(MHD_PTHREAD_MUTEX_)
91 # if defined(PTHREAD_MUTEX_INITIALIZER)
95 # define MHD_MUTEX_STATIC_DEFN_INIT_(m) static MHD_mutex_ m = \
96 PTHREAD_MUTEX_INITIALIZER
100 #if defined(MHD_PTHREAD_MUTEX_)
106 #define MHD_mutex_destroy_(pmutex) (! (pthread_mutex_destroy ((pmutex))))
107 #elif defined(MHD_W32_MUTEX_)
113 #define MHD_mutex_destroy_(pmutex) (DeleteCriticalSection ((pmutex)), ! 0)
121 #define MHD_mutex_destroy_chk_(pmutex) do { \
122 if (! MHD_mutex_destroy_ (pmutex)) \
123 MHD_PANIC (_ ("Failed to destroy mutex.\n")); \
127 #if defined(MHD_PTHREAD_MUTEX_)
135 #define MHD_mutex_lock_(pmutex) (! (pthread_mutex_lock ((pmutex))))
136 #elif defined(MHD_W32_MUTEX_)
144 #define MHD_mutex_lock_(pmutex) (EnterCriticalSection ((pmutex)), ! 0)
154 #define MHD_mutex_lock_chk_(pmutex) do { \
155 if (! MHD_mutex_lock_ (pmutex)) \
156 MHD_PANIC (_ ("Failed to lock mutex.\n")); \
159 #if defined(MHD_PTHREAD_MUTEX_)
165 #define MHD_mutex_unlock_(pmutex) (! (pthread_mutex_unlock ((pmutex))))
166 #elif defined(MHD_W32_MUTEX_)
172 #define MHD_mutex_unlock_(pmutex) (LeaveCriticalSection ((pmutex)), ! 0)
180 #define MHD_mutex_unlock_chk_(pmutex) do { \
181 if (! MHD_mutex_unlock_ (pmutex)) \
182 MHD_PANIC (_ ("Failed to unlock mutex.\n")); \
additional automatic macros for MHD_config.h