]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/result.c
Partial revert of f30269f5d2e4bb5ee7486fe6542078d1b59dba6d
[openldap] / servers / slapd / result.c
index 8b173d452402891a027225b07cd78f53e2633fd6..854e822017ea13032de9e0a54846af181a2b7b1a 100644 (file)
@@ -2,7 +2,7 @@
 /* $OpenLDAP$ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *
- * Copyright 1998-2011 The OpenLDAP Foundation.
+ * Copyright 1998-2012 The OpenLDAP Foundation.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -369,9 +369,11 @@ static long send_ldap_ber(
 
                ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
                ldap_pvt_thread_mutex_unlock( &conn->c_mutex );
+               ldap_pvt_thread_pool_idle( &connection_pool );
                ldap_pvt_thread_cond_wait( &conn->c_write2_cv, &conn->c_write2_mutex );
                conn->c_writewaiter = 0;
                ldap_pvt_thread_mutex_unlock( &conn->c_write2_mutex );
+               ldap_pvt_thread_pool_unidle( &connection_pool );
                ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex );
                if ( conn->c_writers < 0 ) {
                        ret = 0;
@@ -1303,6 +1305,10 @@ slap_send_search_entry( Operation *op, SlapReply *rs )
                                {
                                        continue;
                                }
+                               /* if DSA-specific and replicating, skip */
+                               if ( op->o_sync != SLAP_CONTROL_NONE &&
+                                       desc->ad_type->sat_usage == LDAP_SCHEMA_DSA_OPERATION )
+                                       continue;
                        } else {
                                if ( !userattrs && !ad_inlist( desc, rs->sr_attrs ) ) {
                                        continue;
@@ -1414,8 +1420,7 @@ 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 );
 
-       if ( rs->sr_flags & REP_ENTRY_MUSTRELEASE )
-               rs_flush_entry( op, rs, NULL );
+       rs_flush_entry( op, rs, NULL );
 
        if ( op->o_res_ber == NULL ) {
                bytes = send_ldap_ber( op, ber );
@@ -1581,8 +1586,7 @@ slap_send_search_reference( Operation *op, SlapReply *rs )
        }
 
        rc = 0;
-       if ( rs->sr_flags & REP_ENTRY_MUSTRELEASE )
-               rs_flush_entry( op, rs, NULL );
+       rs_flush_entry( op, rs, NULL );
 
 #ifdef LDAP_CONNECTIONLESS
        if (!op->o_conn || op->o_conn->c_is_udp == 0) {
@@ -1618,13 +1622,15 @@ 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 ) {