From 4682deeb62247d34de87f8e777f99e2d337fd377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Sun, 20 Oct 2024 15:21:43 +0200 Subject: New upstream version 1.3 --- tests/windows-cond.h | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tests/windows-cond.h (limited to 'tests/windows-cond.h') diff --git a/tests/windows-cond.h b/tests/windows-cond.h new file mode 100644 index 00000000..cfc160f5 --- /dev/null +++ b/tests/windows-cond.h @@ -0,0 +1,79 @@ +/* Condition variables (native Windows implementation). + Copyright (C) 2008-2024 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 Yoann Vandoorselaere , 2008. + Based on Bruno Haible lock.h */ + +#ifndef _WINDOWS_COND_H +#define _WINDOWS_COND_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include + +#include + +#include "windows-initguard.h" + +#ifndef _glwthread_linked_waitqueue_link_defined +#define _glwthread_linked_waitqueue_link_defined +struct glwthread_waitqueue_link +{ + struct glwthread_waitqueue_link *wql_next; + struct glwthread_waitqueue_link *wql_prev; +}; +#endif /* _glwthread_linked_waitqueue_link_defined */ + +typedef struct + { + struct glwthread_waitqueue_link wq_list; /* circular list of waiting threads */ + } + glwthread_linked_waitqueue_t; + +typedef struct + { + glwthread_initguard_t guard; /* protects the initialization */ + CRITICAL_SECTION lock; /* protects the remaining fields */ + glwthread_linked_waitqueue_t waiters; /* waiting threads */ + } + glwthread_cond_t; + +#define GLWTHREAD_COND_INIT { GLWTHREAD_INITGUARD_INIT } + +#ifdef __cplusplus +extern "C" { +#endif + +extern int glwthread_cond_init (glwthread_cond_t *cond); +/* Here, to cope with the various types of mutexes, the mutex is a 'void *', and + the caller needs to pass the corresponding *_lock and *_unlock functions. */ +extern int glwthread_cond_wait (glwthread_cond_t *cond, + void *mutex, + int (*mutex_lock) (void *), + int (*mutex_unlock) (void *)); +extern int glwthread_cond_timedwait (glwthread_cond_t *cond, + void *mutex, + int (*mutex_lock) (void *), + int (*mutex_unlock) (void *), + const struct timespec *abstime); +extern int glwthread_cond_signal (glwthread_cond_t *cond); +extern int glwthread_cond_broadcast (glwthread_cond_t *cond); +extern int glwthread_cond_destroy (glwthread_cond_t *cond); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_COND_H */ -- cgit v1.2.3