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();} while(0)
66 #if defined(MHD_PTHREAD_MUTEX_)
67 typedef pthread_mutex_t MHD_mutex_;
68 #elif defined(MHD_W32_MUTEX_)
69 typedef CRITICAL_SECTION MHD_mutex_;
72 #if defined(MHD_PTHREAD_MUTEX_)
78 #define MHD_mutex_init_(pmutex) (!(pthread_mutex_init((pmutex), NULL)))
79 #elif defined(MHD_W32_MUTEX_)
85 #define MHD_mutex_init_(pmutex) (InitializeCriticalSectionAndSpinCount((pmutex),16))
88 #if defined(MHD_PTHREAD_MUTEX_)
89 # if defined(PTHREAD_MUTEX_INITIALIZER)
93 # define MHD_MUTEX_STATIC_DEFN_INIT_(m) static MHD_mutex_ m = PTHREAD_MUTEX_INITIALIZER
97 #if defined(MHD_PTHREAD_MUTEX_)
103 #define MHD_mutex_destroy_(pmutex) (!(pthread_mutex_destroy((pmutex))))
104 #elif defined(MHD_W32_MUTEX_)
110 #define MHD_mutex_destroy_(pmutex) (DeleteCriticalSection((pmutex)), !0)
118 #define MHD_mutex_destroy_chk_(pmutex) do { \
119 if (!MHD_mutex_destroy_(pmutex)) \
120 MHD_PANIC(_("Failed to destroy mutex.\n")); \
124 #if defined(MHD_PTHREAD_MUTEX_)
132 #define MHD_mutex_lock_(pmutex) (!(pthread_mutex_lock((pmutex))))
133 #elif defined(MHD_W32_MUTEX_)
141 #define MHD_mutex_lock_(pmutex) (EnterCriticalSection((pmutex)), !0)
151 #define MHD_mutex_lock_chk_(pmutex) do { \
152 if (!MHD_mutex_lock_(pmutex)) \
153 MHD_PANIC(_("Failed to lock mutex.\n")); \
156 #if defined(MHD_PTHREAD_MUTEX_)
162 #define MHD_mutex_unlock_(pmutex) (!(pthread_mutex_unlock((pmutex))))
163 #elif defined(MHD_W32_MUTEX_)
169 #define MHD_mutex_unlock_(pmutex) (LeaveCriticalSection((pmutex)), !0)
177 #define MHD_mutex_unlock_chk_(pmutex) do { \
178 if (!MHD_mutex_unlock_(pmutex)) \
179 MHD_PANIC(_("Failed to unlock mutex.\n")); \
additional automatic macros for MHD_config.h