[4/7] winhttp: Correct SSL lock size and make sure we free as many as we allocated.

Hans Leidekker hans at codeweavers.com
Wed Oct 21 06:18:43 CDT 2009


Found by valgrind.
---
 dlls/winhttp/net.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/dlls/winhttp/net.c b/dlls/winhttp/net.c
index 6e54348..28b3972 100644
--- a/dlls/winhttp/net.c
+++ b/dlls/winhttp/net.c
@@ -120,6 +120,7 @@ MAKE_FUNCPTR( i2d_X509 );
 #undef MAKE_FUNCPTR
 
 static CRITICAL_SECTION *ssl_locks;
+static unsigned int num_ssl_locks;
 
 static unsigned long ssl_thread_id(void)
 {
@@ -290,16 +291,15 @@ BOOL netconn_init( netconn_t *conn, BOOL secure )
     }
 
     pCRYPTO_set_id_callback(ssl_thread_id);
-    ssl_locks = HeapAlloc(GetProcessHeap(), 0,
-            pCRYPTO_num_locks() * sizeof(HANDLE));
+    num_ssl_locks = pCRYPTO_num_locks();
+    ssl_locks = HeapAlloc(GetProcessHeap(), 0, num_ssl_locks * sizeof(CRITICAL_SECTION));
     if (!ssl_locks)
     {
         set_last_error( ERROR_OUTOFMEMORY );
         LeaveCriticalSection( &init_ssl_cs );
         return FALSE;
     }
-    for (i = 0; i < pCRYPTO_num_locks(); i++)
-        InitializeCriticalSection( &ssl_locks[i] );
+    for (i = 0; i < num_ssl_locks; i++) InitializeCriticalSection( &ssl_locks[i] );
     pCRYPTO_set_locking_callback(ssl_lock_callback);
 
     LeaveCriticalSection( &init_ssl_cs );
@@ -320,8 +320,7 @@ void netconn_unload( void )
         {
             int i;
 
-            for (i = 0; i < pCRYPTO_num_locks(); i++)
-                DeleteCriticalSection( &ssl_locks[i] );
+            for (i = 0; i < num_ssl_locks; i++) DeleteCriticalSection( &ssl_locks[i] );
             HeapFree( GetProcessHeap(), 0, ssl_locks );
         }
         wine_dlclose( libcrypto_handle, NULL, 0 );
-- 
1.6.3.3





More information about the wine-patches mailing list