]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
ITS#9620 Freeze cache while we search
authorOndřej Kuzník <okuznik@symas.com>
Thu, 29 Jul 2021 12:23:28 +0000 (13:23 +0100)
committerQuanah Gibson-Mount <quanah@openldap.org>
Fri, 6 Aug 2021 18:51:51 +0000 (18:51 +0000)
servers/slapd/back-monitor/search.c

index d23497a7ad29ec1954371d58f85086de08a4ce14..49702788f8bf4d593775b21ca1f81b8a79dcf047 100644 (file)
@@ -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 ) {