From 0fffad53c32d226a544789486b12627a6841754f Mon Sep 17 00:00:00 2001 From: Kurt Zeilenga Date: Wed, 10 Jul 2002 22:03:32 +0000 Subject: [PATCH] get data if ready --- servers/slapd/connection.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 0f4ce390da..6425e199f2 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -1164,14 +1164,13 @@ int connection_read(ber_socket_t s) * to propagate to client. */ FD_ZERO(&rfd); FD_SET(s, &rfd); - for (rc=1; rc>0;) - { + for (rc=1; rc>0;) { tv.tv_sec = 1; tv.tv_usec = 0; rc = select(s+1, &rfd, NULL, NULL, &tv); - if (rc == 1) - ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DRAIN, - NULL); + if (rc == 1) { + ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DRAIN, NULL); + } } #endif connection_close( c ); @@ -1206,9 +1205,15 @@ int connection_read(ber_socket_t s) slap_sasl_external( c, c->c_tls_ssf, authid.bv_val ); if ( authid.bv_val ) free( authid.bv_val ); } - connection_return( c ); - ldap_pvt_thread_mutex_unlock( &connections_mutex ); - return 0; + + /* if success and data is ready, fall thru to data input loop */ + if( rc != 0 || + !ber_sockbuf_ctrl( c->c_sb, LBER_SB_OPT_DATA_READY, NULL ) ) + { + connection_return( c ); + ldap_pvt_thread_mutex_unlock( &connections_mutex ); + return 0; + } } #endif -- 2.39.5