winhttp: Unload OpenSSL when unloading winhttp.
authorJuan Lang <juan.lang@gmail.com>
Fri, 2 Oct 2009 14:53:01 +0000 (07:53 -0700)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 5 Oct 2009 11:23:17 +0000 (13:23 +0200)
dlls/winhttp/main.c
dlls/winhttp/net.c
dlls/winhttp/winhttp_private.h

index c0ac9cbe51bf3ffb49edb01ce4000f626a165d60..945123abd2cc630df8e37a76581948eee9e48ca9 100644 (file)
@@ -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;
index a824271dad528578e8a6fca890093fe1ce8971ad..7ab9944e8edaf09e54bf91065110ee7488706e0a 100644 (file)
@@ -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);
index e44510958933b14ba484a2850ef46dd0844e1b8d..64348a22aafd70d3a55ef71fa3788564aa81a6ca 100644 (file)
@@ -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 * );