44#if defined(MHD_USE_W32_THREADS)
45# define MHD_W32_MUTEX_ 1
46# ifndef WIN32_LEAN_AND_MEAN
47# define WIN32_LEAN_AND_MEAN 1
50#elif defined(HAVE_PTHREAD_H) && defined(MHD_USE_POSIX_THREADS)
51# define MHD_PTHREAD_MUTEX_ 1
54# define HAVE_CONFIG_H 1
56# error No base mutex API is available.
63# define MHD_PANIC(msg) do { fprintf (stderr, \
64 "Abnormal termination at %d line in file %s: %s\n", \
65 (int) __LINE__, __FILE__, msg); abort (); \
69#if defined(MHD_PTHREAD_MUTEX_)
70typedef pthread_mutex_t MHD_mutex_;
71#elif defined(MHD_W32_MUTEX_)
72typedef CRITICAL_SECTION MHD_mutex_;
75#if defined(MHD_PTHREAD_MUTEX_)
81#define MHD_mutex_init_(pmutex) (! (pthread_mutex_init ((pmutex), NULL)))
82#elif defined(MHD_W32_MUTEX_)
88#define MHD_mutex_init_(pmutex) (InitializeCriticalSectionAndSpinCount ( \
92#if defined(MHD_PTHREAD_MUTEX_)
93# if defined(PTHREAD_MUTEX_INITIALIZER)
97# define MHD_MUTEX_STATIC_DEFN_INIT_(m) static MHD_mutex_ m = \
98 PTHREAD_MUTEX_INITIALIZER
102#if defined(MHD_PTHREAD_MUTEX_)
108#define MHD_mutex_destroy_(pmutex) (! (pthread_mutex_destroy ((pmutex))))
109#elif defined(MHD_W32_MUTEX_)
115#define MHD_mutex_destroy_(pmutex) (DeleteCriticalSection ((pmutex)), ! 0)
123#define MHD_mutex_destroy_chk_(pmutex) do { \
124 if (! MHD_mutex_destroy_ (pmutex)) \
125 MHD_PANIC (_ ("Failed to destroy mutex.\n")); \
129#if defined(MHD_PTHREAD_MUTEX_)
137#define MHD_mutex_lock_(pmutex) (! (pthread_mutex_lock ((pmutex))))
138#elif defined(MHD_W32_MUTEX_)
146#define MHD_mutex_lock_(pmutex) (EnterCriticalSection ((pmutex)), ! 0)
156#define MHD_mutex_lock_chk_(pmutex) do { \
157 if (! MHD_mutex_lock_ (pmutex)) \
158 MHD_PANIC (_ ("Failed to lock mutex.\n")); \
161#if defined(MHD_PTHREAD_MUTEX_)
167#define MHD_mutex_unlock_(pmutex) (! (pthread_mutex_unlock ((pmutex))))
168#elif defined(MHD_W32_MUTEX_)
174#define MHD_mutex_unlock_(pmutex) (LeaveCriticalSection ((pmutex)), ! 0)
182#define MHD_mutex_unlock_chk_(pmutex) do { \
183 if (! MHD_mutex_unlock_ (pmutex)) \
184 MHD_PANIC (_ ("Failed to unlock mutex.\n")); \
189#define MHD_mutex_init_(ignore) (! 0)
190#define MHD_mutex_destroy_(ignore) (! 0)
191#define MHD_mutex_destroy_chk_(ignore) (void)0
192#define MHD_mutex_lock_(ignore) (! 0)
193#define MHD_mutex_lock_chk_(ignore) (void)0
194#define MHD_mutex_unlock_(ignore) (! 0)
195#define MHD_mutex_unlock_chk_(ignore) (void)0
additional automatic macros for MHD_config.h