diff --git a/servers/slapd/connection.c b/servers/slapd/connection.c index 005496fdd9..3dcadbc58b 100644 --- a/servers/slapd/connection.c +++ b/servers/slapd/connection.c @@ -1493,6 +1493,15 @@ connection_input( } else { conn->c_n_ops_executing++; + /* Don't allow any single conn to soak up all of the + * available threads + */ + if (conn->c_n_ops_executing > connection_pool_max/2) { + ber_socket_t sd; + + ber_sockbuf_ctrl( conn->c_sb, LBER_SB_OPT_GET_FD, &sd ); + slapd_clr_read( sd, 0 ); + } connection_op_activate( conn, op ); }