summaryrefslogtreecommitdiff
path: root/tsd.c
diff options
context:
space:
mode:
authorrpj <rpj>1998-07-31 02:16:34 +0000
committerrpj <rpj>1998-07-31 02:16:34 +0000
commitcc1a70f50a246ad33ecbc8f73d0bbc67ea89f1a7 (patch)
treec5126bec2ab25c271ce68abd52542e6a7ad2e6ae /tsd.c
parent0bc99fb6243a64c6f9a4d503382e9125adeb85a0 (diff)
Fri Jul 31 00:05:45 1998 Ross Johnson <rpj@ixobrychus.canberra.edu.au>
* tsd.c (pthread_key_create): Update to properly associate the destructor routine with the key. * exit.c (_pthread_vacuum): Add call to _pthread_destructor_pop_all().
Diffstat (limited to 'tsd.c')
-rw-r--r--tsd.c14
1 files changed, 5 insertions, 9 deletions
diff --git a/tsd.c b/tsd.c
index 611ed5f..4a83fd9 100644
--- a/tsd.c
+++ b/tsd.c
@@ -12,15 +12,6 @@ pthread_key_create(pthread_key_t *key, void (*destructor)(void *))
{
DWORD index;
- /* FIXME: the destructor function is ignored for now. This needs to
- be managed via the same cleanup handler mechanism as user-define
- cleanup handlers during a thread exit. */
-
- if (destructor != NULL)
- {
- return EINVAL;
- }
-
index = TlsAlloc();
if (index == 0xFFFFFFFF)
{
@@ -30,6 +21,11 @@ pthread_key_create(pthread_key_t *key, void (*destructor)(void *))
/* Only modify the `key' parameter if allocation was successful. */
*key = index;
+ if (destructor != NULL)
+ {
+ return (_pthread_destructor_push(destructor, *key));
+ }
+
return 0;
}