diff options
author | Bruno Haible <bruno@clisp.org> | 2019-06-20 04:15:30 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2019-06-20 04:15:30 +0200 |
commit | 7435d61f26ef6dece4f94ea00972145b587ef7ab (patch) | |
tree | 6d801f856a7e4245071848a33ccdfba955eddaa5 | |
parent | 7b7305f41af7c79ab3739704febba7cf171b404a (diff) | |
download | gnulib-7435d61f26ef6dece4f94ea00972145b587ef7ab.tar.gz gnulib-7435d61f26ef6dece4f94ea00972145b587ef7ab.tar.bz2 |
windows-tls: New module.
* lib/windows-tls.h: New file, based on lib/glthread/tls.h.
* lib/windows-tls.c: New file, based on lib/glthread/tls.h.
* lib/glthread/tls.h: Include windows-tls.h.
(gl_tls_key_t): Define using glwthread_tls_key_t.
* modules/windows-tls: New file.
* modules/tls (Depends-on): Add windows-tls.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | lib/glthread/tls.h | 4 | ||||
-rw-r--r-- | lib/windows-tls.c | 55 | ||||
-rw-r--r-- | lib/windows-tls.h | 40 | ||||
-rw-r--r-- | modules/tls | 1 | ||||
-rw-r--r-- | modules/windows-tls | 27 |
6 files changed, 136 insertions, 1 deletions
@@ -1,5 +1,15 @@ 2019-06-20 Bruno Haible <bruno@clisp.org> + windows-tls: New module. + * lib/windows-tls.h: New file, based on lib/glthread/tls.h. + * lib/windows-tls.c: New file, based on lib/glthread/tls.h. + * lib/glthread/tls.h: Include windows-tls.h. + (gl_tls_key_t): Define using glwthread_tls_key_t. + * modules/windows-tls: New file. + * modules/tls (Depends-on): Add windows-tls. + +2019-06-20 Bruno Haible <bruno@clisp.org> + windows-cond: New module. * lib/windows-cond.h: New file, based on lib/glthread/cond.h. * lib/windows-cond.c: New file, based on lib/glthread/cond.c. diff --git a/lib/glthread/tls.h b/lib/glthread/tls.h index ab854091b5..7a74234788 100644 --- a/lib/glthread/tls.h +++ b/lib/glthread/tls.h @@ -236,9 +236,11 @@ extern void *glthread_tls_get_multithreaded (thread_key_t key); # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> +# include "windows-tls.h" + /* ------------------------- gl_tls_key_t datatype ------------------------- */ -typedef DWORD gl_tls_key_t; +typedef glwthread_tls_key_t gl_tls_key_t; # define glthread_tls_key_init(KEY, DESTRUCTOR) \ /* The destructor is unsupported. */ \ ((*(KEY) = TlsAlloc ()) == (DWORD)-1 ? EAGAIN : ((void) (DESTRUCTOR), 0)) diff --git a/lib/windows-tls.c b/lib/windows-tls.c new file mode 100644 index 0000000000..87aa454da7 --- /dev/null +++ b/lib/windows-tls.c @@ -0,0 +1,55 @@ +/* Thread-local storage (native Windows implementation). + Copyright (C) 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. */ + +#include <config.h> + +/* Specification. */ +#include "windows-tls.h" + +int +glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *)) +{ + /* TODO: The destructor is unsupported. */ + (void) destructor; + + if ((*keyp = TlsAlloc ()) == (DWORD)-1) + return EAGAIN; + return 0; +} + +void * +glwthread_tls_get (glwthread_tls_key_t key) +{ + return TlsGetValue (key); +} + +int +glwthread_tls_set (glwthread_tls_key_t key, void *value) +{ + if (!TlsSetValue (key, value)) + return EINVAL; + return 0; +} + +int +glwthread_tls_key_delete (glwthread_tls_key_t key) +{ + if (!TlsFree (key)) + return EINVAL; + return 0; +} diff --git a/lib/windows-tls.h b/lib/windows-tls.h new file mode 100644 index 0000000000..5e795454e3 --- /dev/null +++ b/lib/windows-tls.h @@ -0,0 +1,40 @@ +/* Thread-local storage (native Windows implementation). + Copyright (C) 2005-2019 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +/* Written by Bruno Haible <bruno@clisp.org>, 2005. */ + +#ifndef _WINDOWS_TLS_H +#define _WINDOWS_TLS_H + +#define WIN32_LEAN_AND_MEAN /* avoid including junk */ +#include <windows.h> + +typedef DWORD glwthread_tls_key_t; + +#ifdef __cplusplus +extern "C" { +#endif + +extern int glwthread_tls_key_create (glwthread_tls_key_t *keyp, void (*destructor) (void *)); +extern void *glwthread_tls_get (glwthread_tls_key_t key); +extern int glwthread_tls_set (glwthread_tls_key_t key, void *value); +extern int glwthread_tls_key_delete (glwthread_tls_key_t key); + +#ifdef __cplusplus +} +#endif + +#endif /* _WINDOWS_TLS_H */ diff --git a/modules/tls b/modules/tls index 5d61044475..f4a5256308 100644 --- a/modules/tls +++ b/modules/tls @@ -8,6 +8,7 @@ m4/tls.m4 Depends-on: threadlib +windows-tls [test $gl_threads_api = windows] configure.ac: gl_TLS diff --git a/modules/windows-tls b/modules/windows-tls new file mode 100644 index 0000000000..32a32eb472 --- /dev/null +++ b/modules/windows-tls @@ -0,0 +1,27 @@ +Description: +Thread-local storage (native Windows implementation). + +Files: +lib/windows-tls.h +lib/windows-tls.c + +Depends-on: + +configure.ac: +AC_REQUIRE([AC_CANONICAL_HOST]) +case "$host_os" in + mingw*) + AC_LIBOBJ([windows-tls]) + ;; +esac + +Makefile.am: + +Include: +"windows-tls.h" + +License: +LGPLv2+ + +Maintainer: +all |