From: Kurt Zeilenga Date: Wed, 10 Jul 2002 22:03:32 +0000 (+0000) Subject: get data if ready X-Git-Tag: NO_SLAP_OP_BLOCKS~1376 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=0fffad53c32d226a544789486b12627a6841754f;p=openldap get data if ready --- 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