]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/result.c
ITS#5328: Make relay_back_has_subordinates() return failure on failure
[openldap] / servers / slapd / result.c
index c83cb22b63d83b23b6e3eb85be0962075b77fee1..8bbddad96f2e0af28c724dc3491b9ea4072e4686 100644 (file)
@@ -145,7 +145,7 @@ static long send_ldap_ber(
 
        /* write only one pdu at a time - wait til it's our turn */
        ldap_pvt_thread_mutex_lock( &conn->c_write1_mutex );
-       if (( op->o_abandon && !op->o_cancel ) || connection_state_closing( conn )) {
+       if (( op->o_abandon && !op->o_cancel ) || !connection_valid( conn )) {
                ldap_pvt_thread_mutex_unlock( &conn->c_write1_mutex );
                return 0;
        }
@@ -415,13 +415,9 @@ send_ldap_response(
        int             rc = LDAP_SUCCESS;
        long    bytes;
 
-       if ( rs->sr_err == SLAPD_ABANDON || op->o_abandon ) {
-               if ( op->o_cancel ) {
-                       rs->sr_err = LDAP_CANCELLED;
-               } else {
-                       rc = SLAPD_ABANDON;
-                       goto clean2;
-               }
+       if (( rs->sr_err == SLAPD_ABANDON || op->o_abandon ) && !op->o_cancel ) {
+               rc = SLAPD_ABANDON;
+               goto clean2;
        }
 
        if ( op->o_callback ) {
@@ -441,9 +437,13 @@ send_ldap_response(
                ber_set_option( ber, LBER_OPT_BER_MEMCTX, &op->o_tmpmemctx );
        }
 
+       rc = rs->sr_err;
+       if ( rc == SLAPD_ABANDON && op->o_cancel )
+               rc = LDAP_CANCELLED;
+
        Debug( LDAP_DEBUG_TRACE,
                "send_ldap_response: msgid=%d tag=%lu err=%d\n",
-               rs->sr_msgid, rs->sr_tag, rs->sr_err );
+               rs->sr_msgid, rs->sr_tag, rc );
 
        if( rs->sr_ref ) {
                Debug( LDAP_DEBUG_ARGS, "send_ldap_response: ref=\"%s\"\n",
@@ -467,7 +467,7 @@ send_ldap_response(
 
        } else {
            rc = ber_printf( ber, "{it{ess" /*"}}"*/,
-               rs->sr_msgid, rs->sr_tag, rs->sr_err,
+               rs->sr_msgid, rs->sr_tag, rc,
                rs->sr_matched == NULL ? "" : rs->sr_matched,
                rs->sr_text == NULL ? "" : rs->sr_text );
        }