From 877ebdf5ef7c40e9d8aeba3894cd07f95bc721d2 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@openldap.org>
Date: Tue, 1 Nov 2011 16:24:10 -0700
Subject: [PATCH] ITS#6981 don't free entries prematurely

---
 servers/slapd/result.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/servers/slapd/result.c b/servers/slapd/result.c
index 1e8d406223..8b173d4524 100644
--- a/servers/slapd/result.c
+++ b/servers/slapd/result.c
@@ -1414,7 +1414,8 @@ slap_send_search_entry( Operation *op, SlapReply *rs )
 	Statslog( LDAP_DEBUG_STATS2, "%s ENTRY dn=\"%s\"\n",
 	    op->o_log_prefix, rs->sr_entry->e_nname.bv_val, 0, 0, 0 );
 
-	rs_flush_entry( op, rs, NULL );
+	if ( rs->sr_flags & REP_ENTRY_MUSTRELEASE )
+		rs_flush_entry( op, rs, NULL );
 
 	if ( op->o_res_ber == NULL ) {
 		bytes = send_ldap_ber( op, ber );
@@ -1580,7 +1581,8 @@ slap_send_search_reference( Operation *op, SlapReply *rs )
 	}
 
 	rc = 0;
-	rs_flush_entry( op, rs, NULL );
+	if ( rs->sr_flags & REP_ENTRY_MUSTRELEASE )
+		rs_flush_entry( op, rs, NULL );
 
 #ifdef LDAP_CONNECTIONLESS
 	if (!op->o_conn || op->o_conn->c_is_udp == 0) {
@@ -1616,15 +1618,13 @@ slap_send_search_reference( Operation *op, SlapReply *rs )
 
 	Debug( LDAP_DEBUG_TRACE, "<= send_search_reference\n", 0, 0, 0 );
 
-	if ( 0 ) {
 rel:
-	    rs_flush_entry( op, rs, NULL );
-	}
-
 	if ( op->o_callback ) {
 		(void)slap_cleanup_play( op, rs );
 	}
 
+    rs_flush_entry( op, rs, NULL );
+
 	if ( rs->sr_flags & REP_CTRLS_MUSTBEFREED ) {
 		rs->sr_flags ^= REP_CTRLS_MUSTBEFREED; /* paranoia */
 		if ( rs->sr_ctrls ) {
-- 
GitLab