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