aboutsummaryrefslogtreecommitdiff
path: root/lib/base/dll.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/base/dll.c')
-rw-r--r--lib/base/dll.c13
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;