[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libmicrohttpd2] 12/21: mhd_locks: added W32 implementation based on SRW
From: |
Admin |
Subject: |
[libmicrohttpd2] 12/21: mhd_locks: added W32 implementation based on SRW locks (and minor improvements) |
Date: |
Fri, 13 Jun 2025 23:38:20 +0200 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd2.
commit c4f413682fb1423cd964a35d16cac9ff4584762b
Author: Evgeny Grin (Karlson2k) <k2k@drgrin.dev>
AuthorDate: Thu Jun 12 22:48:11 2025 +0200
mhd_locks: added W32 implementation based on SRW locks (and minor
improvements)
---
src/mhd2/mhd_locks.h | 96 ++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 74 insertions(+), 22 deletions(-)
diff --git a/src/mhd2/mhd_locks.h b/src/mhd2/mhd_locks.h
index fcc77a4..4dd0017 100644
--- a/src/mhd2/mhd_locks.h
+++ b/src/mhd2/mhd_locks.h
@@ -41,23 +41,34 @@
#ifdef MHD_SUPPORT_THREADS
-#if defined(mhd_THREADS_KIND_W32)
-# define mhd_MUTEX_KIND_W32_CS 1
+#if defined(HAVE_PTHREAD_H) && defined(mhd_THREADS_KIND_POSIX)
+/**
+ * The mutex is POSIX Threads' mutex
+ */
+# define mhd_MUTEX_KIND_PTHREAD 1
+# include <pthread.h>
+# include "sys_null_macro.h"
+#elif defined(mhd_THREADS_KIND_W32)
+# include "sys_w32_ver.h"
+# if _WIN32_WINNT >= 0x0600 /* Vista or later */ && \
+ ! defined (MHD_NO_W32_SRWLOCKS)
+/**
+ * The mutex is W32 SRW lock
+ */
+# define mhd_MUTEX_KIND_W32_SRW 1
+# else
+/**
+ * The mutex is W32 Critical Section
+ */
+# define mhd_MUTEX_KIND_W32_CS 1
+# endif
# if 0 /* _WIN32_WINNT >= 0x0602 */ /* Win8 or later */
- /* This include does not work as _ARM_ or _AMD64_ macros
- are missing */
+/* This include does not work as _ARM_ or _AMD64_ macros
+ are missing */
# include <synchapi.h>
# else
# include <windows.h>
# endif
-#elif defined(HAVE_PTHREAD_H) && defined(mhd_THREADS_KIND_POSIX)
-# define mhd_MUTEX_KIND_PTHREAD 1
-# include <pthread.h>
-# ifdef HAVE_STDDEF_H
-# include <stddef.h> /* for NULL */
-# else
-# include "sys_base_types.h"
-# endif
#else
#error No base mutex API is available.
#endif
@@ -66,6 +77,8 @@
#if defined(mhd_MUTEX_KIND_PTHREAD)
typedef pthread_mutex_t mhd_mutex;
+#elif defined(mhd_MUTEX_KIND_W32_SRW)
+typedef SRWLOCK mhd_mutex;
#elif defined(mhd_MUTEX_KIND_W32_CS)
typedef CRITICAL_SECTION mhd_mutex;
#endif
@@ -76,7 +89,14 @@ typedef CRITICAL_SECTION mhd_mutex;
* @param pmutex the pointer to the mutex
* @return nonzero on success, zero otherwise
*/
-# define mhd_mutex_init(pmutex) (! (pthread_mutex_init ((pmutex), NULL)))
+# define mhd_mutex_init(pmutex) (0 == pthread_mutex_init ((pmutex), NULL))
+#elif defined(mhd_MUTEX_KIND_W32_SRW)
+/**
+ * Initialise a new mutex.
+ * @param pmutex the pointer to the mutex
+ * @return always nonzero (success)
+ */
+# define mhd_mutex_init(pmutex) (InitializeSRWLock ((pmutex)), ! 0)
#elif defined(mhd_MUTEX_KIND_W32_CS)
# if _WIN32_WINNT < 0x0600
/* Before Vista */
@@ -142,6 +162,13 @@ typedef CRITICAL_SECTION mhd_mutex;
*/
# define mhd_MUTEX_INITIALISER_STAT PTHREAD_MUTEX_INITIALIZER
# endif /* PTHREAD_MUTEX_INITIALIZER */
+#elif defined(mhd_MUTEX_KIND_W32_SRW)
+# if defined(SRWLOCK_INIT)
+/**
+ * The value to statically initialise mutex
+ */
+# define mhd_MUTEX_INITIALISER_STAT SRWLOCK_INIT
+# endif
#endif
#ifdef mhd_MUTEX_INITIALISER_STAT
@@ -158,12 +185,19 @@ typedef CRITICAL_SECTION mhd_mutex;
* @param pmutex the pointer to the mutex
* @return nonzero on success, zero otherwise
*/
-# define mhd_mutex_destroy(pmutex) (! (pthread_mutex_destroy ((pmutex))))
+# define mhd_mutex_destroy(pmutex) (0 == pthread_mutex_destroy ((pmutex)))
+#elif defined(mhd_MUTEX_KIND_W32_SRW)
+/**
+ * Destroy (no-op) previously initialised mutex.
+ * @param pmutex the pointer to the mutex
+ * @return always nonzero (success)
+ */
+# define mhd_mutex_destroy(pmutex) ((void) (pmutex))
#elif defined(mhd_MUTEX_KIND_W32_CS)
/**
* Destroy previously initialised mutex.
* @param pmutex the pointer to the mutex
- * @return Always nonzero
+ * @return always nonzero (success)
*/
# define mhd_mutex_destroy(pmutex) (DeleteCriticalSection ((pmutex)), ! 0)
#endif
@@ -177,14 +211,23 @@ typedef CRITICAL_SECTION mhd_mutex;
* @param pmutex the pointer to the mutex
* @return nonzero on success, zero otherwise
*/
-# define mhd_mutex_lock(pmutex) (! (pthread_mutex_lock ((pmutex))))
+# define mhd_mutex_lock(pmutex) (0 == pthread_mutex_lock ((pmutex)))
+#elif defined(mhd_MUTEX_KIND_W32_SRW)
+/**
+ * Acquire a lock on previously initialised mutex.
+ * If the mutex was already locked by other thread, function blocks until
+ * the mutex becomes available.
+ * @param pmutex the pointer to the mutex
+ * @return always nonzero (success)
+ */
+# define mhd_mutex_lock(pmutex) (AcquireSRWLockExclusive ((pmutex)), ! 0)
#elif defined(mhd_MUTEX_KIND_W32_CS)
/**
* Acquire a lock on previously initialised mutex.
* If the mutex was already locked by other thread, function blocks until
* the mutex becomes available.
* @param pmutex the pointer to the mutex
- * @return nonzero on success, zero otherwise
+ * @return always nonzero (success)
*/
# define mhd_mutex_lock(pmutex) (EnterCriticalSection ((pmutex)), ! 0)
#endif
@@ -195,12 +238,21 @@ typedef CRITICAL_SECTION mhd_mutex;
* @param pmutex the pointer to the mutex
* @return nonzero on success, zero otherwise
*/
-# define mhd_mutex_unlock(pmutex) (! (pthread_mutex_unlock ((pmutex))))
+# define mhd_mutex_unlock(pmutex) (0 == pthread_mutex_unlock ((pmutex)))
+#elif defined(mhd_MUTEX_KIND_W32_SRW)
+/**
+ * Acquire a lock on previously initialised mutex.
+ * If the mutex was already locked by other thread, function blocks until
+ * the mutex becomes available.
+ * @param pmutex the pointer to the mutex
+ * @return always nonzero (success)
+ */
+# define mhd_mutex_lock(pmutex) (ReleaseSRWLockExclusive ((pmutex)), ! 0)
#elif defined(mhd_MUTEX_KIND_W32_CS)
/**
* Unlock previously initialised and locked mutex.
* @param pmutex pointer to mutex
- * @return Always nonzero
+ * @return always nonzero (success)
*/
# define mhd_mutex_unlock(pmutex) (LeaveCriticalSection ((pmutex)), ! 0)
#endif
@@ -243,11 +295,11 @@ typedef CRITICAL_SECTION mhd_mutex;
# define mhd_MUTEX_INITIALISER_STAT /* empty */
# define mhd_MUTEX_STATIC_DEFN_INIT(ignored) /* nothing */
# define mhd_mutex_destroy(ignored) (! 0)
-# define mhd_mutex_destroy_chk(ignored) (void) 0
+# define mhd_mutex_destroy_chk(ignored) ((void) 0)
# define mhd_mutex_lock(ignored) (! 0)
-# define mhd_mutex_lock_chk(ignored) (void) 0
+# define mhd_mutex_lock_chk(ignored) ((void) 0)
# define mhd_mutex_unlock(ignored) (! 0)
-# define mhd_mutex_unlock_chk(ignored) (void) 0
+# define mhd_mutex_unlock_chk(ignored) ((void) 0)
#endif /* ! MHD_SUPPORT_THREADS */
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [libmicrohttpd2] branch master updated (cdd4c1f -> a71f9db), Admin, 2025/06/13
- [libmicrohttpd2] 09/21: mhd_str: added 8 bit -> 2 xdigits one-pass encoding, Admin, 2025/06/13
- [libmicrohttpd2] 11/21: mhd_str: optimised caseless comparisons and case transformations, Admin, 2025/06/13
- [libmicrohttpd2] 13/21: parse_http_std_method(): optimised, Admin, 2025/06/13
- [libmicrohttpd2] 21/21: perf_replies: added response sizes 8 MiB and 101 MiB, Admin, 2025/06/13
- [libmicrohttpd2] 02/21: bootstrap: make sure that pre-commit hook really used, Admin, 2025/06/13
- [libmicrohttpd2] 01/21: conn_data_send.c: fixed large sending, added some asserts, Admin, 2025/06/13
- [libmicrohttpd2] 04/21: xdigittovalue(): optimised., Admin, 2025/06/13
- [libmicrohttpd2] 18/21: Renamed test_postprocessor -> test_postparser to match API naming, Admin, 2025/06/13
- [libmicrohttpd2] 16/21: configure: minor check improvement, Admin, 2025/06/13
- [libmicrohttpd2] 12/21: mhd_locks: added W32 implementation based on SRW locks (and minor improvements),
Admin <=
- [libmicrohttpd2] 10/21: configure: added release build linker flags, Admin, 2025/06/13
- [libmicrohttpd2] 15/21: POST parser: improved parsing performance by storing complete delimiter instead of boundary, Admin, 2025/06/13
- [libmicrohttpd2] 14/21: POST parser: optimised large upload processing, Admin, 2025/06/13
- [libmicrohttpd2] 07/21: daemon_start: cosmetics, fixed code style, Admin, 2025/06/13
- [libmicrohttpd2] 06/21: Fixed compiler warnings, Admin, 2025/06/13
- [libmicrohttpd2] 08/21: mhd_str: added functions attributes, fixed doxy, removed extra checks in functions, Admin, 2025/06/13
- [libmicrohttpd2] 03/21: bootstrap: English fixes, Admin, 2025/06/13
- [libmicrohttpd2] 05/21: mhd_str.c: minor readability improvements, Admin, 2025/06/13
- [libmicrohttpd2] 20/21: perf_replies: fixed formatting, Admin, 2025/06/13
- [libmicrohttpd2] 19/21: conn_data_send.c: fixed formatting, Admin, 2025/06/13