Create a dummy pthread key for value "0", as some buggy PKCS#11 libraries mangle it

This commit is contained in:
Martin Willi
2011-12-07 13:42:07 +01:00
parent dcb5c5906e
commit 005b02cbe3
+10
View File
@@ -413,6 +413,12 @@ void thread_exit(void *val)
pthread_exit(val);
}
/**
* A dummy thread value that reserved pthread_key_t value "0". A buggy PKCS#11
* library mangles this key, without owning it, so we allocate it for them.
*/
static thread_value_t *dummy1;
/**
* Described in header.
*/
@@ -420,6 +426,8 @@ void threads_init()
{
private_thread_t *main_thread = thread_create_internal();
dummy1 = thread_value_create(NULL);
main_thread->id = 0;
main_thread->thread_id = pthread_self();
current_thread = thread_value_create(NULL);
@@ -443,6 +451,8 @@ void threads_deinit()
{
private_thread_t *main_thread = (private_thread_t*)thread_current();
dummy1->destroy(dummy1);
main_thread->mutex->lock(main_thread->mutex);
thread_destroy(main_thread);
current_thread->destroy(current_thread);