]> git.sur5r.net Git - openldap/commitdiff
ITS#8050 fix ldap_get_option(LDAP_OPT_SESSION_REFCNT)
authorHoward Chu <hyc@openldap.org>
Wed, 4 Feb 2015 03:16:20 +0000 (03:16 +0000)
committerQuanah Gibson-Mount <quanah@openldap.org>
Fri, 6 Feb 2015 17:10:17 +0000 (11:10 -0600)
libraries/libldap/options.c
libraries/libldap/unbind.c

index 4d612a8c35edd19c2779053b3d0f407796578524..5762d6a1936ed11261b93622b91b2f76f99b1b8c 100644 (file)
@@ -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;
 
index 385ad9e711d6e11ab044c803b1887284c23172ae..a49c040dc2afcf03817e900461914a48ea7e050a 100644 (file)
@@ -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 );
 }