]> git.sur5r.net Git - openldap/commitdiff
Protect return of the locked entry.
authorKurt Zeilenga <kurt@openldap.org>
Mon, 18 Jan 1999 17:41:12 +0000 (17:41 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 18 Jan 1999 17:41:12 +0000 (17:41 +0000)
Note: we probably can replace the dn2entry_r with dn2id as only the id
is needed unless we're holding the lock for filtercandidates or something

servers/slapd/back-ldbm/search.c

index b1f7d33ef36b43ba901f3d4a020d49778a3ea6c2..8f8430dedf62d8a059c239e7bad0046a3475e626 100644 (file)
@@ -358,7 +358,7 @@ onelevel_candidates(
 )
 {
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
-       Entry           *e;
+       Entry           *e = NULL;
        Filter          *f;
        char            buf[20];
        IDList          *candidates;
@@ -366,7 +366,7 @@ onelevel_candidates(
        Debug(LDAP_DEBUG_TRACE, "onelevel_candidates: base: \"%s\"\n", base, 0, 0);
 
        *err = LDAP_SUCCESS;
-       e = NULL;
+
        /* get the base object with reader lock */
        if ( base != NULL && *base != '\0' &&
                (e = dn2entry_r( be, base, matched )) == NULL )
@@ -401,7 +401,9 @@ onelevel_candidates(
        filter_free( f );
 
        /* free entry and reader lock */
-       cache_return_entry_r( &li->li_cache, e );
+       if( e != NULL ) {
+               cache_return_entry_r( &li->li_cache, e );
+       }
        return( candidates );
 }
 
@@ -441,6 +443,8 @@ subtree_candidates(
        *err = LDAP_SUCCESS;
        f = NULL;
        if ( lookupbase ) {
+               e = NULL;
+
                if ( base != NULL && *base != '\0' &&
                        (e = dn2entry_r( be, base, matched )) == NULL )
                {