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