diff --git a/servers/lloadd/client.c b/servers/lloadd/client.c index 6b5fa61260..b742081a4d 100644 --- a/servers/lloadd/client.c +++ b/servers/lloadd/client.c @@ -130,8 +130,7 @@ handle_requests( void *ctx, void *arg ) int requests_handled = 0; CONNECTION_LOCK_DECREF(c); - for ( ; requests_handled < slap_conn_max_pdus_per_cycle; - requests_handled++ ) { + for ( ;; ) { BerElement *ber; ber_tag_t tag; ber_len_t len; @@ -145,6 +144,11 @@ handle_requests( void *ctx, void *arg ) } /* Otherwise, handle_one_request leaves the connection locked */ + if ( ++requests_handled >= slap_conn_max_pdus_per_cycle ) { + /* Do not read now, re-enable read event instead */ + break; + } + if ( (ber = ber_alloc()) == NULL ) { Debug( LDAP_DEBUG_ANY, "client_read_cb: " "ber_alloc failed\n" ); diff --git a/servers/lloadd/upstream.c b/servers/lloadd/upstream.c index 84e8d1be8f..9272820441 100644 --- a/servers/lloadd/upstream.c +++ b/servers/lloadd/upstream.c @@ -465,8 +465,7 @@ handle_responses( void *ctx, void *arg ) int responses_handled = 0; CONNECTION_LOCK_DECREF(c); - for ( ; responses_handled < slap_conn_max_pdus_per_cycle; - responses_handled++ ) { + for ( ;; ) { BerElement *ber; ber_tag_t tag; ber_len_t len; @@ -480,6 +479,11 @@ handle_responses( void *ctx, void *arg ) } /* Otherwise, handle_one_response leaves the connection locked */ + if ( ++responses_handled >= slap_conn_max_pdus_per_cycle ) { + /* Do not read now, re-enable read event instead */ + break; + } + if ( (ber = ber_alloc()) == NULL ) { Debug( LDAP_DEBUG_ANY, "handle_responses: " "ber_alloc failed\n" );