From e1908ae95dd4c9d19ee4dfabfc8bf8a7f85943fe Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 18:58:41 +0200 Subject: Adding upstream version 9.4. Signed-off-by: Daniel Baumann --- lib/windows-timedrecmutex.h | 62 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 lib/windows-timedrecmutex.h (limited to 'lib/windows-timedrecmutex.h') diff --git a/lib/windows-timedrecmutex.h b/lib/windows-timedrecmutex.h new file mode 100644 index 0000000..daeb88f --- /dev/null +++ b/lib/windows-timedrecmutex.h @@ -0,0 +1,62 @@ +/* Timed recursive mutexes (native Windows implementation). + Copyright (C) 2005-2023 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible , 2005, 2019. + Based on GCC's gthr-win32.h. */ + +#ifndef _WINDOWS_TIMEDRECMUTEX_H +#define _WINDOWS_TIMEDRECMUTEX_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include + +#include "windows-initguard.h" + +/* The native Windows documentation says that CRITICAL_SECTION already + implements a recursive lock. But we need not rely on it: It's easy to + implement a recursive lock without this assumption. */ + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + DWORD owner; + unsigned long depth; + HANDLE event; + CRITICAL_SECTION lock; + } + glwthread_timedrecmutex_t; + +#define GLWTHREAD_TIMEDRECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } + +#ifdef __cplusplus +extern "C" { +#endif + +extern int glwthread_timedrecmutex_init (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_lock (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_trylock (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_timedlock (glwthread_timedrecmutex_t *mutex, + const struct timespec *abstime); +extern int glwthread_timedrecmutex_unlock (glwthread_timedrecmutex_t *mutex); +extern int glwthread_timedrecmutex_destroy (glwthread_timedrecmutex_t *mutex); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_TIMEDRECMUTEX_H */ -- cgit v1.2.3