diff options
Diffstat (limited to 'lib/base/dll.c')
| -rw-r--r-- | lib/base/dll.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/base/dll.c b/lib/base/dll.c index 31017a01191b..53f1f63bcdd5 100644 --- a/lib/base/dll.c +++ b/lib/base/dll.c @@ -83,7 +83,8 @@ struct tls_values { static HEIMDAL_THREAD_LOCAL struct tls_values values; -#define DEAD_KEY ((void *)8) +static char dead_key[1]; +static void no_dtor(void *d) { (void)d; } void heim_w32_service_thread_detach(void *unused) @@ -111,7 +112,7 @@ heim_w32_service_thread_detach(void *unused) assert(i < key_defs->keys_start_idx + key_defs->keys_num); } dtor = key_defs->keys_dtors[i - key_defs->keys_start_idx]; - if (values.values[i] != NULL && dtor != NULL && dtor != DEAD_KEY) + if (values.values[i] != NULL && dtor != NULL && dtor != no_dtor) dtor(values.values[i]); values.values[i] = NULL; } @@ -150,7 +151,7 @@ heim_w32_key_create(HEIM_PRIV_thread_key *key, void (*dtor)(void *)) #if !defined(WIN32) (void) pthread_once(&pt_once, create_pt_key); - (void) pthread_setspecific(pt_key, DEAD_KEY); + (void) pthread_setspecific(pt_key, dead_key); #endif HEIMDAL_MUTEX_lock(&tls_key_defs_lock); @@ -266,7 +267,7 @@ heim_w32_delete_key(HEIM_PRIV_thread_key key) key_lookup(key, &key_defs, &dtor_idx, NULL); if (key_defs == NULL) return EINVAL; - key_defs->keys_dtors[dtor_idx] = DEAD_KEY; + key_defs->keys_dtors[dtor_idx] = no_dtor; return 0; } @@ -279,7 +280,7 @@ heim_w32_setspecific(HEIM_PRIV_thread_key key, void *value) size_t i; #if !defined(WIN32) - (void) pthread_setspecific(pt_key, DEAD_KEY); + (void) pthread_setspecific(pt_key, dead_key); #endif key_lookup(key, NULL, NULL, &dtor); @@ -304,7 +305,7 @@ heim_w32_setspecific(HEIM_PRIV_thread_key key, void *value) assert(key < values.values_num); - if (values.values[key] != NULL && dtor != NULL && dtor != DEAD_KEY) + if (values.values[key] != NULL && dtor != NULL && dtor != no_dtor) dtor(values.values[key]); values.values[key] = value; |
