From 3622cf7275f93159cb9c40eec1898c03a3722f83 Mon Sep 17 00:00:00 2001
From: Quanah Gibson-Mount <quanah@openldap.org>
Date: Thu, 15 Apr 2010 20:42:22 +0000
Subject: [PATCH] Fix for CB_TAIL with cached results

---
 servers/slapd/overlays/pcache.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c
index 699954357f..83705e0104 100644
--- a/servers/slapd/overlays/pcache.c
+++ b/servers/slapd/overlays/pcache.c
@@ -3018,14 +3018,22 @@ pcache_op_search(
 				pbi->bi_cq = answerable;
 
 			op->o_bd = &cm->db;
-#if 0
 			if ( cm->response_cb == PCACHE_RESPONSE_CB_TAIL ) {
+				slap_callback cb;
 				/* The cached entry was already processed by any
 				 * other overlays, so don't let it get processed again.
+				 *
+				 * This loop removes over_back_response from the stack.
 				 */
-				op->o_callback = NULL;
+				if ( overlay_callback_after_backover( op, &cb, 0) == 0 ) {
+					slap_callback **scp;
+					for ( scp = &op->o_callback; *scp != NULL;
+						scp = &(*scp)->sc_next ) {
+						if ( (*scp)->sc_next == &cb )
+							*scp = cb.sc_next;
+					}
+				}
 			}
-#endif
 			i = cm->db.bd_info->bi_op_search( op, rs );
 		}
 		ldap_pvt_thread_rdwr_runlock(&answerable->rwlock);
-- 
GitLab