I think your problem (and the stack overflow) is caused by using "CALLBACK" in the 3 function typedefs. Try using __cdecl instead of CALLBACK.
__Martin >>>>> On Tue, 11 Oct 2016 16:15:24 +0000, Simone Sgualdini via RT said: > > > Hi, > > > I'm writing a c++ server application that calls thounsands of times per > hour the rsa_new() > and rsa_free() openssl functions. > > After debugging a lot I discovered that "sometimes" (I'm not able to > tell a precise number) the rsa_free > does not release properly the memory allocated by the rsa_new. > In order to prove this I created the simple program below. If i run it, > i see the related working set > going bigger and bigger, 4KB per second. > > I'm using the 1.0.2.8 version of libeay32.dll and ssleay32.ddl under > windows 7 64 bit. > > It this a known bug? I'm forgetting something? > > Thanks in advance > > Simone Sgualdini > Italy > > > //--------------------------------------------------------------------------- > > #include <vcl.h> > > > #ifdef _cplusplus > extern "C" > { > #endif > #include <openssl/rand.h> > #include <openssl/ssl.h> > #include <openssl/err.h> > #include <openssl/rsa.h> > #include <openssl/bn.h> > #ifdef _cplusplus > } > #endif > #pragma hdrstop > > HMODULE libeay32DLL = NULL; > HMODULE ssleay32DLL = NULL; > > typedef RSA * (CALLBACK *myRSA_new) (void); > typedef void (CALLBACK *myRSA_free) (RSA *r); > typedef int (CALLBACK *mySSL_library_init) (void); > > myRSA_new _RSA_new = NULL; > myRSA_free _RSA_free = NULL; > mySSL_library_init _SSL_library_init; > > //--------------------------------------------------------------------------- > > #pragma argsused > > int main(int argc, char* argv[]) > { > RSA *rsa; > unsigned long count = 0; > > libeay32DLL = LoadLibrary("libeay32.dll"); > ssleay32DLL = LoadLibrary("ssleay32.dll"); > > if(libeay32DLL && ssleay32DLL) > { > _RSA_new = (myRSA_new) > GetProcAddress(libeay32DLL,"RSA_new"); > _RSA_free = (myRSA_free) > GetProcAddress(libeay32DLL,"RSA_free"); > _SSL_library_init = (mySSL_library_init) > GetProcAddress(ssleay32DLL,"SSL_library_init"); > } > > _SSL_library_init(); > > while(1) > { > > if(++count %100 == 0) // whitout this, I get a stack overflow > immediately > Sleep(1); > > *_RSA_free(_RSA_new());* > } > > return 0; > } > > > -- > Ticket here: http://rt.openssl.org/Ticket/Display.html?id=4704 > Please log in as guest with password guest if prompted > > -- > openssl-dev mailing list > To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev > -- openssl-dev mailing list To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev