diff --git a/mongoose.c b/mongoose.c index 51e9bb14..10701c14 100644 --- a/mongoose.c +++ b/mongoose.c @@ -3647,6 +3647,18 @@ static int set_ssl_option(struct mg_context *ctx) { return 1; } + +static void uninitialize_ssl(struct mg_context *ctx) { + int i; + if (ctx->ssl_ctx != NULL) { + CRYPTO_set_locking_callback(NULL); + for (i = 0; i < CRYPTO_num_locks(); i++) { + pthread_mutex_destroy(&ssl_mutexes[i]); + } + CRYPTO_set_locking_callback(NULL); + CRYPTO_set_id_callback(NULL); + } +} #endif // !NO_SSL static int set_gpass_option(struct mg_context *ctx) { @@ -4026,6 +4038,10 @@ static void master_thread(struct mg_context *ctx) { (void) pthread_cond_destroy(&ctx->sq_empty); (void) pthread_cond_destroy(&ctx->sq_full); +#if !defined(NO_SSL) + uninitialize_ssl(ctx); +#endif + // Signal mg_stop() that we're done ctx->stop_flag = 2;