From 0fdb45ddb5dd2a14dea4646b00439cde13495619 Mon Sep 17 00:00:00 2001 From: Avi Kivity <avi.kivity@gmail.com> Date: Tue, 8 Jan 2013 13:33:58 +0200 Subject: [PATCH] pthread: fix pthread_key_create() Implemented the wrong prototype. --- libc/pthread.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libc/pthread.cc b/libc/pthread.cc index 15290ea65..e6f426a31 100644 --- a/libc/pthread.cc +++ b/libc/pthread.cc @@ -16,11 +16,12 @@ namespace pthread_private { mutex tsd_key_mutex; std::vector<bool> tsd_used_keys(tsd_nkeys); + std::vector<void (*)(void*)> tsd_dtor(tsd_nkeys); } using namespace pthread_private; -pthread_key_t pthread_key_create() +int pthread_key_create(pthread_key_t* key, void (*dtor)(void*)) { std::lock_guard<mutex> guard(tsd_key_mutex); auto p = std::find(tsd_used_keys.begin(), tsd_used_keys.end(), false); @@ -28,7 +29,9 @@ pthread_key_t pthread_key_create() return ENOMEM; } *p = true; - return p - tsd_used_keys.begin(); + *key = p - tsd_used_keys.begin(); + tsd_dtor[*key] = dtor; + return 0; } void* pthread_getspecific(pthread_key_t key) -- GitLab