mirror of
https://git.openldap.org/openldap/openldap.git
synced 2025-12-21 07:09:34 -05:00
ITS#7167 only poll sockets for write as needed
This commit is contained in:
parent
92ed65d298
commit
33f6bc4fe6
5 changed files with 31 additions and 5 deletions
|
|
@ -622,6 +622,7 @@ LDAP_F (void) ldap_free_select_info( void *sip );
|
||||||
LDAP_F (void) ldap_mark_select_write( LDAP *ld, Sockbuf *sb );
|
LDAP_F (void) ldap_mark_select_write( LDAP *ld, Sockbuf *sb );
|
||||||
LDAP_F (void) ldap_mark_select_read( LDAP *ld, Sockbuf *sb );
|
LDAP_F (void) ldap_mark_select_read( LDAP *ld, Sockbuf *sb );
|
||||||
LDAP_F (void) ldap_mark_select_clear( LDAP *ld, Sockbuf *sb );
|
LDAP_F (void) ldap_mark_select_clear( LDAP *ld, Sockbuf *sb );
|
||||||
|
LDAP_F (void) ldap_clear_select_write( LDAP *ld, Sockbuf *sb );
|
||||||
LDAP_F (int) ldap_is_read_ready( LDAP *ld, Sockbuf *sb );
|
LDAP_F (int) ldap_is_read_ready( LDAP *ld, Sockbuf *sb );
|
||||||
LDAP_F (int) ldap_is_write_ready( LDAP *ld, Sockbuf *sb );
|
LDAP_F (int) ldap_is_write_ready( LDAP *ld, Sockbuf *sb );
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -344,7 +344,6 @@ ldap_init_fd(
|
||||||
|
|
||||||
/* Add the connection to the *LDAP's select pool */
|
/* Add the connection to the *LDAP's select pool */
|
||||||
ldap_mark_select_read( ld, conn->lconn_sb );
|
ldap_mark_select_read( ld, conn->lconn_sb );
|
||||||
ldap_mark_select_write( ld, conn->lconn_sb );
|
|
||||||
|
|
||||||
*ldp = ld;
|
*ldp = ld;
|
||||||
return LDAP_SUCCESS;
|
return LDAP_SUCCESS;
|
||||||
|
|
@ -502,7 +501,6 @@ ldap_open_internal_connection( LDAP **ldp, ber_socket_t *fdp )
|
||||||
|
|
||||||
/* Add the connection to the *LDAP's select pool */
|
/* Add the connection to the *LDAP's select pool */
|
||||||
ldap_mark_select_read( ld, c->lconn_sb );
|
ldap_mark_select_read( ld, c->lconn_sb );
|
||||||
ldap_mark_select_write( ld, c->lconn_sb );
|
|
||||||
|
|
||||||
/* Make this connection an LDAP V3 protocol connection */
|
/* Make this connection an LDAP V3 protocol connection */
|
||||||
rc = LDAP_VERSION3;
|
rc = LDAP_VERSION3;
|
||||||
|
|
|
||||||
|
|
@ -966,6 +966,32 @@ ldap_mark_select_clear( LDAP *ld, Sockbuf *sb )
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ldap_clear_select_write( LDAP *ld, Sockbuf *sb )
|
||||||
|
{
|
||||||
|
struct selectinfo *sip;
|
||||||
|
ber_socket_t sd;
|
||||||
|
|
||||||
|
sip = (struct selectinfo *)ld->ld_selectinfo;
|
||||||
|
|
||||||
|
ber_sockbuf_ctrl( sb, LBER_SB_OPT_GET_FD, &sd );
|
||||||
|
|
||||||
|
#ifdef HAVE_POLL
|
||||||
|
/* for UNIX poll(2) */
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for(i=0; i < sip->si_maxfd; i++) {
|
||||||
|
if( sip->si_fds[i].fd == sd ) {
|
||||||
|
sip->si_fds[i].events &= ~POLL_WRITE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* for UNIX select(2) */
|
||||||
|
FD_CLR( sd, &sip->si_writefds );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ldap_is_write_ready( LDAP *ld, Sockbuf *sb )
|
ldap_is_write_ready( LDAP *ld, Sockbuf *sb )
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,7 @@ ldap_int_flush_request(
|
||||||
|
|
||||||
/* sent -- waiting for a response */
|
/* sent -- waiting for a response */
|
||||||
ldap_mark_select_read( ld, lc->lconn_sb );
|
ldap_mark_select_read( ld, lc->lconn_sb );
|
||||||
|
ldap_clear_select_write( ld, lc->lconn_sb );
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -302,7 +302,7 @@ wait4msg(
|
||||||
if ( ber_sockbuf_ctrl( lc->lconn_sb,
|
if ( ber_sockbuf_ctrl( lc->lconn_sb,
|
||||||
LBER_SB_OPT_DATA_READY, NULL ) )
|
LBER_SB_OPT_DATA_READY, NULL ) )
|
||||||
{
|
{
|
||||||
lc_ready = 1;
|
lc_ready = 2; /* ready at ber level, not socket level */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -373,8 +373,8 @@ wait4msg(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LDAP_MUTEX_UNLOCK( &ld->ld_req_mutex );
|
LDAP_MUTEX_UNLOCK( &ld->ld_req_mutex );
|
||||||
/* Quit looping if no one handled any events */
|
/* Quit looping if no one handled any socket events */
|
||||||
if (!serviced)
|
if (!serviced && lc_ready == 1)
|
||||||
rc = -1;
|
rc = -1;
|
||||||
}
|
}
|
||||||
LDAP_MUTEX_UNLOCK( &ld->ld_conn_mutex );
|
LDAP_MUTEX_UNLOCK( &ld->ld_conn_mutex );
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue