denish patel wrote:
Hi once again,Some more of my observations: When LDAP_OPT_THREAD_FN_PTRS parameter is set the program goes into a loop. Debugging more it was found that the get_errno function is invoked by nsldapi_send_ber_message (Line No. 402 - request.c). 402. int terrno = LDAP_GET_ERRNO( ld ); 403. if ( NSLDAPI_ERRNO_IO_INPROGRESS( terrno )) { 404. if ( async ) { 405. rc = -2; 406. break; 407. } 408. } else { 409. nsldapi_connection_lost_nolock( ld, sb ); 410. rc = -1; /* fatal error */ 411. break; 412. } It is from #402 that the get_errno function is invoked. This function returns 11 as mentioned in an earlier mail. The difference between the hanging & the non-hanging program lies here. When we do not set LDAP_OPT_THREAD_FN_PTRS, the value I see for terrno is 0, whereas it's value is 11 when the parameter has been set. ...
I am not 100% sure what is causing the problem you are experiencing (it seems like your errno callback function is not returning the operating system's errno value).
I do not think this is well documented, but it is not a good idea to mix together use of your own thread callback functions and the prldap library (which is always used when you call the Mozilla LDAP C SDK SSL functions). Do you really need to install your own thread callback functions? The prldap library uses NSPR to provide thread safety, and NSPR does a very nice job of hiding OS differences, etc.
-- Mark Smith Pearl Crescent http://pearlcrescent.com/ _______________________________________________ dev-tech-ldap mailing list [email protected] https://lists.mozilla.org/listinfo/dev-tech-ldap
