diff --git a/servers/slapd/back-monitor/search.c b/servers/slapd/back-monitor/search.c index d23497a7ad..49702788f8 100644 --- a/servers/slapd/back-monitor/search.c +++ b/servers/slapd/back-monitor/search.c @@ -215,6 +215,9 @@ monitor_back_search( Operation *op, SlapReply *rs ) return rs->sr_err; } + /* Freeze the cache while we're using it */ + ldap_pvt_thread_rdwr_rlock( &mi->mi_cache_rwlock ); + rs->sr_attrs = op->oq_search.rs_attrs; switch ( op->oq_search.rs_scope ) { case LDAP_SCOPE_BASE: @@ -260,6 +263,8 @@ monitor_back_search( Operation *op, SlapReply *rs ) monitor_cache_release( mi, e ); } + ldap_pvt_thread_rdwr_runlock( &mi->mi_cache_rwlock ); + rs->sr_attrs = NULL; rs->sr_err = rc; if ( rs->sr_err != SLAPD_ABANDON ) {