diff --git a/libraries/libldap/options.c b/libraries/libldap/options.c index 4d612a8c35edd19c2779053b3d0f407796578524..5762d6a1936ed11261b93622b91b2f76f99b1b8c 100644 --- a/libraries/libldap/options.c +++ b/libraries/libldap/options.c @@ -371,7 +371,9 @@ ldap_get_option( /* bad param */ break; } + LDAP_MUTEX_LOCK( &ld->ld_ldcmutex ); * (int *) outvalue = ld->ld_ldcrefcnt; + LDAP_MUTEX_UNLOCK( &ld->ld_ldcmutex ); rc = LDAP_OPT_SUCCESS; break; diff --git a/libraries/libldap/unbind.c b/libraries/libldap/unbind.c index 385ad9e711d6e11ab044c803b1887284c23172ae..a49c040dc2afcf03817e900461914a48ea7e050a 100644 --- a/libraries/libldap/unbind.c +++ b/libraries/libldap/unbind.c @@ -97,13 +97,14 @@ ldap_ld_free( if ( ld->ld_referrals != NULL) { LDAP_VFREE(ld->ld_referrals); ld->ld_referrals = NULL; - } + } LDAP_MUTEX_UNLOCK( &ld->ld_ldcmutex ); LDAP_FREE( (char *) ld ); return( err ); } /* This ld is the last thread. */ + LDAP_MUTEX_UNLOCK( &ld->ld_ldcmutex ); /* free LDAP structure and outstanding requests/responses */ LDAP_MUTEX_LOCK( &ld->ld_req_mutex ); @@ -123,7 +124,7 @@ ldap_ld_free( next = lm->lm_next; ldap_msgfree( lm ); } - + if ( ld->ld_abandoned != NULL ) { LDAP_FREE( ld->ld_abandoned ); ld->ld_abandoned = NULL; @@ -159,8 +160,8 @@ ldap_ld_free( if ( ld->ld_referrals != NULL) { LDAP_VFREE(ld->ld_referrals); ld->ld_referrals = NULL; - } - + } + if ( ld->ld_selectinfo != NULL ) { ldap_free_select_info( ld->ld_selectinfo ); ld->ld_selectinfo = NULL; @@ -227,7 +228,6 @@ ldap_ld_free( ldap_pvt_thread_mutex_destroy( &ld->ld_res_mutex ); ldap_pvt_thread_mutex_destroy( &ld->ld_abandon_mutex ); ldap_pvt_thread_mutex_destroy( &ld->ld_ldopts_mutex ); - ldap_pvt_thread_mutex_unlock( &ld->ld_ldcmutex ); ldap_pvt_thread_mutex_destroy( &ld->ld_ldcmutex ); #endif #ifndef NDEBUG @@ -235,7 +235,7 @@ ldap_ld_free( #endif LDAP_FREE( (char *) ld->ldc ); LDAP_FREE( (char *) ld ); - + return( err ); }