diff --git a/servers/slapd/back-bdb/search.c b/servers/slapd/back-bdb/search.c
index 9308731e329504401afcca09a47883819f296a2b..cdbfcdb2d5b540c7a228656807965179e4b76312 100644
--- a/servers/slapd/back-bdb/search.c
+++ b/servers/slapd/back-bdb/search.c
@@ -569,6 +569,10 @@ dn2entry_retry:
 #ifdef SLAP_ZONE_ALLOC
 	slap_zn_runlock(bdb->bi_cache.c_zctx, e);
 #endif
+	if ( e != e_root ) {
+		bdb_cache_return_entry_r(bdb, e, &lock);
+	}
+	e = NULL;
 
 	/* select candidates */
 	if ( op->oq_search.rs_scope == LDAP_SCOPE_BASE ) {
@@ -591,11 +595,6 @@ cand_retry:
 		}
 	}
 
-	if ( e != e_root ) {
-		bdb_cache_return_entry_r(bdb, e, &lock);
-	}
-	e = NULL;
-
 	/* start cursor at beginning of candidates.
 	 */
 	cursor = 0;