Juan Lang : wininet: Unload OpenSSL when unloading wininet.

Alexandre Julliard julliard at winehq.org
Fri Oct 2 11:02:25 CDT 2009


Module: wine
Branch: master
Commit: 41592569fdc28ffb665ecf834205416cb577d938
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=41592569fdc28ffb665ecf834205416cb577d938

Author: Juan Lang <juan.lang at gmail.com>
Date:   Fri Oct  2 07:43:45 2009 -0700

wininet: Unload OpenSSL when unloading wininet.

---

 dlls/wininet/internet.c      |    2 ++
 dlls/wininet/internet.h      |    1 +
 dlls/wininet/netconnection.c |   16 ++++++++++++++++
 3 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c
index 1f08c49..619674e 100644
--- a/dlls/wininet/internet.c
+++ b/dlls/wininet/internet.c
@@ -290,6 +290,8 @@ BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 
         case DLL_PROCESS_DETACH:
 
+            NETCON_unload();
+
 	    URLCacheContainers_DeleteAll();
 
 	    if (g_dwTlsErrIndex != TLS_OUT_OF_INDEXES)
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h
index 39d8083..75568fa 100644
--- a/dlls/wininet/internet.h
+++ b/dlls/wininet/internet.h
@@ -429,6 +429,7 @@ VOID INTERNET_SendCallback(object_header_t *hdr, DWORD_PTR dwContext,
 
 BOOL NETCON_connected(WININET_NETCONNECTION *connection);
 BOOL NETCON_init(WININET_NETCONNECTION *connnection, BOOL useSSL);
+void NETCON_unload(void);
 BOOL NETCON_create(WININET_NETCONNECTION *connection, int domain,
 	      int type, int protocol);
 BOOL NETCON_close(WININET_NETCONNECTION *connection);
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c
index d54e3ac..1a9d7a2 100644
--- a/dlls/wininet/netconnection.c
+++ b/dlls/wininet/netconnection.c
@@ -120,6 +120,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);
@@ -191,6 +192,7 @@ BOOL NETCON_init(WININET_NETCONNECTION *connection, BOOL useSSL)
 	DYNSSL(SSL_library_init);
 	DYNSSL(SSL_load_error_strings);
 	DYNSSL(SSLv23_method);
+	DYNSSL(SSL_CTX_free);
 	DYNSSL(SSL_CTX_new);
 	DYNSSL(SSL_new);
 	DYNSSL(SSL_free);
@@ -246,6 +248,20 @@ BOOL NETCON_init(WININET_NETCONNECTION *connection, BOOL useSSL)
     return TRUE;
 }
 
+void NETCON_unload(void)
+{
+#if defined(SONAME_LIBSSL) && defined(SONAME_LIBCRYPTO)
+    if (OpenSSL_crypto_handle)
+        wine_dlclose(OpenSSL_crypto_handle, NULL, 0);
+    if (OpenSSL_ssl_handle)
+    {
+        if (ctx)
+            pSSL_CTX_free(ctx);
+        wine_dlclose(OpenSSL_ssl_handle, NULL, 0);
+    }
+#endif
+}
+
 BOOL NETCON_connected(WININET_NETCONNECTION *connection)
 {
     if (connection->socketFD == -1)




More information about the wine-cvs mailing list