diff options
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | exit.c | 4 | ||||
| -rw-r--r-- | tsd.c | 14 | 
3 files changed, 13 insertions, 11 deletions
| @@ -1,5 +1,11 @@  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(). +  	* implement.h (_pthread_handler_pop_all): Add prototype.  	(_pthread_destructor_pop_all): Ditto. @@ -16,8 +16,8 @@ _pthread_vacuum(void)    _pthread_handler_pop_all(_PTHREAD_CLEANUP_STACK,   			   _PTHREAD_HANDLER_EXECUTE); -  _pthread_handler_pop_all(_PTHREAD_DESTRUCTOR_STACK,  -			   _PTHREAD_HANDLER_EXECUTE); +  /* Run all TSD key destructors. */ +  _pthread_destructor_pop_all();    /* Pop any atfork handlers without executing them. */    _pthread_handler_pop_all(_PTHREAD_FORKPREPARE_STACK,  @@ -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;  } | 
