diff --git a/libvncclient/tls_openssl.c b/libvncclient/tls_openssl.c index 88e31f5..b6df946 100644 --- a/libvncclient/tls_openssl.c +++ b/libvncclient/tls_openssl.c @@ -568,19 +568,20 @@ void FreeTLS(rfbClient* client) { int i; - if (mutex_buf == NULL) - return (0); - - CRYPTO_set_dynlock_create_callback(NULL); - CRYPTO_set_dynlock_lock_callback(NULL); - CRYPTO_set_dynlock_destroy_callback(NULL); - - CRYPTO_set_locking_callback(NULL); - CRYPTO_set_id_callback(NULL); + if (mutex_buf != NULL) { + CRYPTO_set_dynlock_create_callback(NULL); + CRYPTO_set_dynlock_lock_callback(NULL); + CRYPTO_set_dynlock_destroy_callback(NULL); + + CRYPTO_set_locking_callback(NULL); + CRYPTO_set_id_callback(NULL); + + for (i = 0; i < CRYPTO_num_locks(); i++) + pthread_mutex_destroy(&mutex_buf[i]); + free(mutex_buf); + mutex_buf = NULL; + } - for (i = 0; i < CRYPTO_num_locks(); i++) - pthread_mutex_destroy(&mutex_buf[i]); - free(mutex_buf); - mutex_buf = NULL; + SSL_free(client->tlsSession); }