diff options
author | Daniel Stenberg <daniel@haxx.se> | 2016-08-29 23:18:31 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2016-09-14 14:35:44 +0200 |
commit | d93215621f029b5048117496afdbba1b49e953a1 (patch) | |
tree | b597da5f56eedfd5b1697925d377b6647e9dd022 /lib | |
parent | 4ba1569ad18f793be06d99a1098ab146b0247e1e (diff) |
openssl: fix per-thread memory leak usiong 1.0.1 or 1.0.2
OpenSSL 1.0.1 and 1.0.2 build an error queue that is stored per-thread
so we need to clean it when easy handles are freed, in case the thread
will be killed in which the easy handle was used. All OpenSSL code in
libcurl should extract the error in association with the error already
so clearing this queue here should be harmless at worst.
Fixes #964
Diffstat (limited to 'lib')
-rw-r--r-- | lib/vtls/openssl.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c index 0a46f9d43..44a6bd82b 100644 --- a/lib/vtls/openssl.c +++ b/lib/vtls/openssl.c @@ -1056,6 +1056,14 @@ void Curl_ossl_close_all(struct Curl_easy *data) #else (void)data; #endif +#if !defined(HAVE_ERR_REMOVE_THREAD_STATE_DEPRECATED) && \ + defined(HAVE_ERR_REMOVE_THREAD_STATE) + /* OpenSSL 1.0.1 and 1.0.2 build an error queue that is stored per-thread + so we need to clean it here in case the thread will be killed. All OpenSSL + code should extract the error in association with the error so clearing + this queue here should be harmless at worst. */ + ERR_remove_thread_state(NULL); +#endif } /* ====================================================== */ |