From edfb3d73d64c070a4da84c91f73a12c908d335c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Kuzn=C3=ADk?= Date: Wed, 21 Feb 2018 13:51:51 +0000 Subject: [PATCH] Fix operation status tracking. An operation is rejected iff it has to be dropped before we can find an upstream for it (unless we handle it ourselves, that is). At that point it is failed unless completed successfully. This makes a difference for multi-stage binds which alternate between 'failed' (we are waiting on a server response) and 'completed' (server did what we asked them to, waiting on client to continue). --- servers/lloadd/bind.c | 1 + servers/lloadd/client.c | 1 + 2 files changed, 2 insertions(+) diff --git a/servers/lloadd/bind.c b/servers/lloadd/bind.c index f803c915b4..c8e9ea6828 100644 --- a/servers/lloadd/bind.c +++ b/servers/lloadd/bind.c @@ -408,6 +408,7 @@ request_bind( LloadConnection *client, LloadOperation *op ) op->o_upstream = upstream; op->o_upstream_connid = upstream->c_connid; op->o_upstream_msgid = upstream->c_next_msgid++; + op->o_res = LLOAD_OP_FAILED; if ( BER_BVISNULL( &mech ) ) { if ( !BER_BVISNULL( &upstream->c_sasl_bind_mech ) ) { diff --git a/servers/lloadd/client.c b/servers/lloadd/client.c index 87fb009dd2..0cc1b504e3 100644 --- a/servers/lloadd/client.c +++ b/servers/lloadd/client.c @@ -106,6 +106,7 @@ request_process( LloadConnection *client, LloadOperation *op ) } op->o_upstream = upstream; op->o_upstream_connid = upstream->c_connid; + op->o_res = LLOAD_OP_FAILED; output = upstream->c_pendingber; if ( output == NULL && (output = ber_alloc()) == NULL ) {