From d7d8a0eec46219adc421065223959737a91f92ba Mon Sep 17 00:00:00 2001 From: Juan Lang Date: Fri, 2 Oct 2009 07:53:01 -0700 Subject: [PATCH] winhttp: Unload OpenSSL when unloading winhttp. --- dlls/winhttp/main.c | 1 + dlls/winhttp/net.c | 16 ++++++++++++++++ dlls/winhttp/winhttp_private.h | 1 + 3 files changed, 18 insertions(+) diff --git a/dlls/winhttp/main.c b/dlls/winhttp/main.c index c0ac9cbe51b..945123abd2c 100644 --- a/dlls/winhttp/main.c +++ b/dlls/winhttp/main.c @@ -42,6 +42,7 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) DisableThreadLibraryCalls(hInstDLL); break; case DLL_PROCESS_DETACH: + netconn_unload(); break; } return TRUE; diff --git a/dlls/winhttp/net.c b/dlls/winhttp/net.c index a824271dad5..7ab9944e8ed 100644 --- a/dlls/winhttp/net.c +++ b/dlls/winhttp/net.c @@ -97,6 +97,7 @@ static SSL_CTX *ctx; MAKE_FUNCPTR( SSL_library_init ); MAKE_FUNCPTR( SSL_load_error_strings ); MAKE_FUNCPTR( SSLv23_method ); +MAKE_FUNCPTR( SSL_CTX_free ); MAKE_FUNCPTR( SSL_CTX_new ); MAKE_FUNCPTR( SSL_new ); MAKE_FUNCPTR( SSL_free ); @@ -221,6 +222,7 @@ BOOL netconn_init( netconn_t *conn, BOOL secure ) LOAD_FUNCPTR( SSL_library_init ); LOAD_FUNCPTR( SSL_load_error_strings ); LOAD_FUNCPTR( SSLv23_method ); + LOAD_FUNCPTR( SSL_CTX_free ); LOAD_FUNCPTR( SSL_CTX_new ); LOAD_FUNCPTR( SSL_new ); LOAD_FUNCPTR( SSL_free ); @@ -270,6 +272,20 @@ BOOL netconn_init( netconn_t *conn, BOOL secure ) return TRUE; } +void netconn_unload( void ) +{ +#if defined(SONAME_LIBSSL) && defined(SONAME_LIBCRYPTO) + if (libcrypto_handle) + wine_dlclose( libcrypto_handle, NULL, 0 ); + if (libssl_handle) + { + if (ctx) + pSSL_CTX_free( ctx ); + wine_dlclose( libssl_handle, NULL, 0 ); + } +#endif +} + BOOL netconn_connected( netconn_t *conn ) { return (conn->socket != -1); diff --git a/dlls/winhttp/winhttp_private.h b/dlls/winhttp/winhttp_private.h index e4451095893..64348a22aaf 100644 --- a/dlls/winhttp/winhttp_private.h +++ b/dlls/winhttp/winhttp_private.h @@ -215,6 +215,7 @@ BOOL netconn_connected( netconn_t * ); BOOL netconn_create( netconn_t *, int, int, int ); BOOL netconn_get_next_line( netconn_t *, char *, DWORD * ); BOOL netconn_init( netconn_t *, BOOL ); +void netconn_unload( void ); BOOL netconn_query_data_available( netconn_t *, DWORD * ); BOOL netconn_recv( netconn_t *, void *, size_t, int, int * ); BOOL netconn_resolve( WCHAR *, INTERNET_PORT, struct sockaddr *, socklen_t * ); -- 2.11.4.GIT