Hi Michel,

In the code I sent over before, I was calling CloseHandle on the thread:

HANDLE h1=CreateThread(0,0,thread1,0,0,&t1); if(h1==0) { return 0; }*CloseHandle(h1);*

I modified the code you sent slightly so the cleanup functions all get reached. Still getting handle leaks (see info at bottom of the email thread). In the code below, I check the program for leaks once the MessageBox pops up after all the cleanup functions. Then there is a 20 second pause after which the program exits.

The results are the same as before.. why is it that the program doesn't leak anymore if the creation of the thread is removed which essentially does nothing? Also why is it that if all the SSL functions are removed in the program, but the thread is still created the leaks go away? Something weird is going on. It is as if OpenSSL just doesn't like the CreateThread function being used (even if the thread doesn't do anything related to OpenSSL (tried modifying code in the thread to do nothing -- e.g. blank thread). Thanks for the help, all.

    for( int i=0; i<7; i++ ) Sleep(1000);

  CloseHandle( h1 );

    ERR_remove_state(0);
    EVP_cleanup();
    ERR_free_strings();
    CRYPTO_cleanup_all_ex_data();
    sk_SSL_COMP_free( SSL_COMP_get_compression_methods());

    _CrtDumpMemoryLeaks();

*MessageBox*(0,"gothere","gothere",0); *// at this point Handle leaks are still being reported... see data below*

    Sleep(20000);




Address / Handle: 0x0000C001
shmem-win32.c
sslleak.exe
Atom
0 bytes
Thread ID: 14524
1/25 11:38:34 827ms (Lifetime:00:00:39:561ms)
Sequence: 11
sslleak.exe  ___shmem_grab : [shmem-win32.c Line 0]
sslleak.exe  _fc_key_init_once : [unwind-sjlj.c Line 0]
sslleak.exe  ___tmainCRTStartup : [crtexe.c Line 0]
kernel32.dll  BaseThreadInitThunk : [{FUNC}BaseThreadInitThunk Line 0]
ntdll.dll RtlInitializeExceptionChain : [{FUNC}RtlInitializeExceptionChain Line 0] ntdll.dll RtlInitializeExceptionChain : [{FUNC}RtlInitializeExceptionChain Line 0]



Address / Handle: 0x0000C004
shmem.c
sslleak.exe
Atom
0 bytes
Thread ID: 14524
1/25 11:38:34 827ms (Lifetime:00:00:39:561ms)
Sequence: 27
sslleak.exe  ___shmem_winpthreads_grab : [shmem.c Line 0]
sslleak.exe  _mutex_ref_init : [mutex.c Line 0]
sslleak.exe  _enterOnceObject : [thread.c Line 0]
sslleak.exe  ___tmainCRTStartup : [crtexe.c Line 0]
kernel32.dll  BaseThreadInitThunk : [{FUNC}BaseThreadInitThunk Line 0]
ntdll.dll RtlInitializeExceptionChain : [{FUNC}RtlInitializeExceptionChain Line 0]

Address / Handle: 0x0000C00F
shmem-win32.c
sslleak.exe
Atom
0 bytes
Thread ID: 14524
1/25 11:38:34 827ms (Lifetime:00:00:39:561ms)
Sequence: 97
sslleak.exe  ___shmem_grab : [shmem-win32.c Line 0]
sslleak.exe  ___shmem_grab : [shmem-win32.c Line 0]

Address / Handle: 0x0000C009
shmem.c
sslleak.exe
Atom
0 bytes
Thread ID: 14524
1/25 11:38:34 827ms (Lifetime:00:00:39:561ms)
Sequence: 61
sslleak.exe  ___shmem_winpthreads_grab : [shmem.c Line 0]
sslleak.exe  _mutex_static_init : [mutex.c Line 0]
sslleak.exe  _pop_pthread_mem : [thread.c Line 0]
sslleak.exe  _pop_pthread_mem : [thread.c Line 0]



Address / Handle: 0x0000C012
shmem.c
sslleak.exe
Atom
0 bytes
Thread ID: 14524
1/25 11:38:34 842ms (Lifetime:00:00:39:546ms)
Sequence: 112
sslleak.exe  ___shmem_winpthreads_grab : [shmem.c Line 0]
sslleak.exe  _rwlock_static_init : [rwlock.c Line 0]
sslleak.exe  _rwlock_static_init : [rwlock.c Line 0]








On 1/25/2015 6:05 AM, Michel SALES wrote:
Hi Avery,

I am afraid your program demonstrates very little.

If you load OpenSSL library, you have to call some of the OpenSSL free
functions as indicated in a previous post,
and if you create a thread, you have to call CloseHandle() :

#include <windows.h>
#include <crtdbg.h>

#include <openssl/ssl.h>
#include <openssl/err.h>

DWORD __stdcall thread1( LPVOID l )
{
     for( int i=0; i<7; i++ )
         Sleep(1000);
     ERR_remove_state(0);
     return 0;
}

int main( int argc, char* argv[] )
{
//  _crtBreakAlloc = ...;

     SSL_library_init();
     SSL_load_error_strings();

     DWORD  t1;
     HANDLE h1 = CreateThread( 0, 0, thread1, 0, 0, &t1 );

     for( int i=0; i<7; i++ ) Sleep(1000);

     if( h1 ) {
         WaitForSingleObject( thread1, INFINITE );
         CloseHandle( h1 );
     }
ERR_remove_state(0);
     EVP_cleanup();
     ERR_free_strings();
     CRYPTO_cleanup_all_ex_data();
     sk_SSL_COMP_free( SSL_COMP_get_compression_methods());

     _CrtDumpMemoryLeaks();

     return 0;
}

Hope it helps,

Michel


De : openssl-users [mailto:openssl-users-boun...@openssl.org] De la part de
Avery A. Tarasov
Envoyé : samedi 24 janvier 2015 22:34
À : openssl-users@openssl.org
Objet : Re: [openssl-users] Handle Leaks - shmem-win32.c shmem.c - OpenSSL
1.0.1l

Hi Michel,

It doesn't appear to be related to that.  I added CloseHandle's and got the
same result.

Here are my updated findings... The following simple program still causes
the same Handle Leaks...

Important findings:

1)  If    SSL_library_init() and SSL_load_error_strings() are removed (which
are the only 2 OpenSSL functions I'm using).... the handle leaks go away..
2)  If    SSL_library_init() and SSL_load_error_strings() are kept but the
creation of the thread is removed  -- no more handle leaks..

So the problem is something related to the combination of loading OpenSSL
and creating a thread (even though that thread does nothing whatsoever
related to OpenSSL).  Very odd.

DWORD __stdcall thread1(LPVOID l)
{
     while(1)
     {   Sleep(1000);    }
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR
lpCmdLine, int nCmdShow) {


      SSL_library_init();   // if these 2 lines removed
     SSL_load_error_strings();  // no more handle leaks
     DWORD t1;
HANDLE h1=CreateThread(0,0,thread1,0,0,&t1); if(h1==0) { return
0;     }      CloseHandle(h1);  //if  SSL_library_init(); and
SSL_load_error_strings();  are kept  but this line is removed... no more
handle leaks


     while(1)
     {
         Sleep(1000);
     }
}




_______________________________________________
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users


_______________________________________________
openssl-users mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-users

Reply via email to