Gayathri the core and the binary file are attached with the message.

Please let me know if you get any idea.

If you aware how the call back mechanism works. Please share the same.

Thanks in advance.



Gayathri Sundar-3 wrote:
> 
> Can u share the parsed core file?
> 
> On Wednesday, May 11, 2011, Mani Suresh <suresh84...@gmail.com> wrote:
>>
>> While executing the below code its coring randomly in two cases,
>>
>> 1) While executing the method SSL_library_init() in the constructor.
>> 2) Coring while executing the call back method locking_function().
>>
>> We are not sure, now the call back method is calling after it is set to
>> NULL
>>
>> Ex : CRYPTO_set_locking_callback(NULL)
>>
>> Here, after we set to NULL its calling the call back method.
>>
>> We want to make sure it should not be called after setting to NULL.
>>
>> It will be great if someone explain me in detail, how the call back
>> mechanism works internally.
>>
>> Code:
>> -----
>> pthread_mutex_t *SslBIO::_lnSslBioMutex=NULL;
>>
>> void SslBIO::locking_function(int mode, int type, const char * file, int
>> line)
>> {
>>   int rstat;
>>   if (mode & CRYPTO_LOCK)
>>   {
>>     fprintf(stderr, "\nDEBUG: Locking the Mutex _lnSslBioMutex[%d] Mode =
>> %d
>> File :%s Line No : %d\n",type,mode,file,line);
>>     rstat = pthread_mutex_lock(&(SslBIO::_lnSslBioMutex[type]));
>>     lnChkMutex(rstat, FL);
>>   }
>>   else
>>   {
>>     fprintf(stderr, "\nDEBUG: UnLocking the Mutex _lnSslBioMutex[%d] Mode
>> =
>> %d File :%s Line No : %d\n",type,mode,file,line);
>>     rstat = pthread_mutex_unlock(&(SslBIO::_lnSslBioMutex[type]));
>>     lnChkMutex(rstat, FL);
>>   }
>> }
>>
>> unsigned long SslBIO::id_function()
>> {
>>   unsigned long ulThreadId = (unsigned long)pthread_self();
>>   fprintf(stderr, "\nDEBUG: Thread ID = %d\n",ulThreadId);
>>   return (ulThreadId);
>> }
>>
>> int SslBIO::init(const char * initarg)
>> {
>>      int i;
>>
>>     _lnSslBioMutex = (pthread_mutex_t *)
>> OPENSSL_malloc(CRYPTO_num_locks() *
>> sizeof(pthread_mutex_t));
>>
>>     if (!_lnSslBioMutex)
>>       return 0;
>>
>>     fprintf(stderr, "\nDEBUG: Number of Locks(CRYPTO_NUM_LOCKS) = %d
>> \n",CRYPTO_num_locks());
>>
>>     for(i=0;i<CRYPTO_num_locks();i++)
>>     {
>>       fprintf(stderr, "\nDEBUG: Initialize the Mutex
>> _lnSslBioMutex[%d]\n",i);
>>       int rstat = pthread_mutex_init(&(_lnSslBioMutex[i]),
>> pthread_mutexattr_default);
>>       lnChkMutex(rstat, FL);
>>     }
>>
>>     CRYPTO_set_id_callback(SslBIO::id_function);
>>     CRYPTO_set_locking_callback(SslBIO::locking_function);
>>
>>
>>    return 0;
>> }
>>
>> int SslBIO::terminate()
>> {
>>   int i = 0;
>>   int rstat;
>>   if (!_lnSslBioMutex)
>>   {
>>     return 0;
>>   }
>>
>>   CRYPTO_set_id_callback(NULL);
>>   CRYPTO_set_locking_callback(NULL);
>>
>>   for(i=0;i<CRYPTO_num_locks();i++)
>>   {
>>     fprintf(stderr, "\nDEBUG: Cleanup the Mutex _lnSslBioMutex[%d]\n",i);
>>     rstat = pthread_mutex_destroy(&(_lnSslBioMutex[i]));
>>     lnChkMutex(rstat, FL);
>>   }
>>
>>   OPENSSL_free(_lnSslBioMutex);
>>   _lnSslBioMutex = NULL;
>> }
>>
>> SslBIO::SslBIO(const char *host,
>>                  const int port, const int timeout,
>>                  int &retCode, int blockingConnect)
>> {
>>   _debug = 0;
>>   _lnreqctx = 0;
>>   _type = SslBIO::CALLER;
>>   _totSent = 0;
>>   _totReceived = 0;
>>   _errBuf[0] = '\0';
>>   if(host!=NULL)
>>     strcpy(_hostName,(char *)host);
>>   _portNum = port;
>>
>>   retCode = FAIL;
>>
>>
>>
>>   /* Set up the library */
>>   SSL_library_init();
>>   ERR_load_BIO_strings();
>>   SSL_load_error_strings();
>>   OpenSSL_add_all_algorithms();
>>
>>   _sslctx = SSL_CTX_new(SSLv23_client_method());
>>   if(_sslctx == 0)
>>   {
>>     fprintf(stderr, "failed SslBIO::SslBIO. SslBIO not initialized.
>> _sslctx=0\n");
>>     return;
>>   }
>>
>>   _bio = BIO_new_ssl_connect(_sslctx);
>>
>>
>>   BIO_get_ssl(_bio, &_ssl);
>>   SSL_set_mode(_ssl, SSL_MODE_AUTO_RETRY);
>>
>>   /* Create and setup the connection */
>>   BIO_set_conn_hostname(_bio, _hostName); //
>> "cdc13-www.lexisnexis.com:https");
>>   BIO_set_conn_int_port(_bio, &_portNum); // "443");
>>
>>   if(BIO_do_connect(_bio) <= 0)
>>   {
>>       fprintf(stderr, "Error attempting to connect
>> [%s[%d]]\n",_hostName,_portNum);
>>       ERR_print_errors_fp(stderr);
>>       BIO_free_all(_bio);
>>       _bio = NULL; //Nullify the _bio member object after deallocating
>>       return;
>>   }
>>   else
>>   {
>>     fprintf(stderr, "SslBIO: connected[%s[%d]]\n",_hostName,_portNum);
>>   }
>>
>>   /* Check the certificate */
>>
>>   if(SSL_get_verify_result(_ssl) != X509_V_OK)
>>   {
>>       fprintf(stderr, "Certificate verification error: %i\n",
>> SSL_get_verify_result(_ssl));
>>   }
>>
>>   _timeout = timeout;
>>   retCode = OK;
>> }
>>
>>
>> SslBIO::~SslBIO() {
>>
>>   /* Close the connection and free the context */
>>   if (_bio != 0)
>>   {
>>     BIO_free_all(_bio);
>>     _bio=NULL; // bulletproof for webstar 3019980
>>   }
>>   if (_sslctx != 0)
>>   {
>>     fprintf(stderr, "Freeing SslBIO::_sslctx\n");
>>     SSL_CTX_free(_sslctx);
>>     _sslctx=NULL; // bulletproof for webstar 3019980
>>   }
>> }
>>
>> int SslBIO::read(char *buf, int len, int &currRead)
>> {
>>   int  retCode;
>>
>>   if (buf == LN_NULL)
>>   {
>>       return(FAIL);
>>   }
>>
>>   printf("DEBUG: Before Read \n");
>>   currRead = BIO_read(_bio, buf, len);
>>   printf("DEBUG: After Read currRead = %d Buf = %s Length =
>> %d\n",currRead,buf,len);
>>
>>   if (currRead >= 0)
>>   {
>>     buf[currRead] = 0;
>>     if (_debug)
>>     {
>>       ostrstream strm;
>>       strm << "Out of SslBIO::read currRead =  " << currRead << endl;
>>
>>       strm << ends;
>>
>>       delete strm.str();
>>     }
>>   }
>>   else
>>     buf[0] = 0;
>>
>>   return(OK);
>> }
>>
>> int SslBIO::write(const char *buf, const int len)
>> {
>>
>>   int          written;
>>   int          totLen;
>>
>>   if (len < 0)
>>   {
>>     return(FAIL);
>>   }
>>
>>   totLen = len;
>>   printf("DEBUG: Before Write\n");
>>   if ((written = BIO_write(_bio, buf, len)) != totLen)
>>   {
>>     return(FAIL);
>>   }
>>   printf("DEBUG: After Write written = %d Buf = %s Length =
>> %d\n",written,buf,len);
>>   _totSent += totLen;
>>
>>   return(OK);
>> }
>>
>> --
>> View this message in context:
>> http://old.nabble.com/Core-occurred-while-executing-SSL_library_init%28%29-and-call-back-method-locking_function%28%29-tp31596267p31596267.html
>> Sent from the OpenSSL - User mailing list archive at Nabble.com.
>>
>> ______________________________________________________________________
>> OpenSSL Project                                 http://www.openssl.org
>> User Support Mailing List                    openssl-users@openssl.org
>> Automated List Manager                           majord...@openssl.org
>>
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> User Support Mailing List                    openssl-users@openssl.org
> Automated List Manager                           majord...@openssl.org
> 
> 
http://old.nabble.com/file/p31600337/core.gz core.gz 
http://old.nabble.com/file/p31600337/WebHttps WebHttps 
-- 
View this message in context: 
http://old.nabble.com/Core-occurred-while-executing-SSL_library_init%28%29-and-call-back-method-locking_function%28%29-tp31596267p31600337.html
Sent from the OpenSSL - User mailing list archive at Nabble.com.

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to