X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=servers%2Fslapd%2Fdaemon.c;h=fe87e196a4629a031e221c75bf981834214175eb;hb=7fe91339dfd08d6c4168c8493f5c1f0faca6ba54;hp=fb01e403f34809d4efff0caad573c4774a25ad88;hpb=05ec9552a745f8a7f784e4796e4d364eb31d9f4a;p=openldap diff --git a/servers/slapd/daemon.c b/servers/slapd/daemon.c index fb01e403f3..fe87e196a4 100644 --- a/servers/slapd/daemon.c +++ b/servers/slapd/daemon.c @@ -161,9 +161,6 @@ static struct slap_daemon { /*************************************** * Use epoll infrastructure - epoll(4) * ***************************************/ - -#undef SLAP_EVENT_ACK /* events trigger once per descriptor */ - # define SLAP_EVENT_FNAME "epoll" # define SLAP_EVENTS_ARE_INDEXED 0 # define SLAP_EPOLL_SOCK_IX(s) (slap_daemon.sd_index[(s)]) @@ -218,7 +215,7 @@ static struct slap_daemon { int rc; \ SLAP_EPOLL_SOCK_IX((s)) = slap_daemon.sd_nfds; \ SLAP_EPOLL_SOCK_EP((s)).data.ptr = (l) ? (l) : (void *)(&SLAP_EPOLL_SOCK_IX(s)); \ - SLAP_EPOLL_SOCK_EV((s)) = EPOLLIN|EPOLLET; \ + SLAP_EPOLL_SOCK_EV((s)) = EPOLLIN; \ rc = epoll_ctl(slap_daemon.sd_epfd, EPOLL_CTL_ADD, \ (s), &SLAP_EPOLL_SOCK_EP((s))); \ if ( rc == 0 ) { \ @@ -294,12 +291,10 @@ static struct slap_daemon { } while (0) #elif defined(SLAP_X_DEVPOLL) && defined(HAVE_DEVPOLL) + /************************************************************* * Use Solaris' (>= 2.7) /dev/poll infrastructure - poll(7d) * *************************************************************/ - -#define SLAP_EVENT_ACK 1 /* events keep signalling unless we stop them */ - # define SLAP_EVENT_FNAME "/dev/poll" # define SLAP_EVENTS_ARE_INDEXED 0 /* @@ -475,9 +470,6 @@ static struct slap_daemon { } while (0) #else /* ! epoll && ! /dev/poll */ - -#define SLAP_EVENT_ACK 1 /* events keep signalling unless we stop them */ - # ifdef HAVE_WINSOCK # define SLAP_EVENT_FNAME "WSselect" /* Winsock provides a "select" function but its fd_sets are @@ -935,24 +927,6 @@ slapd_remove( WAKE_LISTENER(wake || slapd_gentle_shutdown == 2); } -void -slapd_ack_write( ber_socket_t s, int wake ) -{ -#ifdef SLAP_EVENT_ACK - ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex ); - - if ( SLAP_SOCK_IS_WRITE( s )) { - assert( SLAP_SOCK_IS_ACTIVE( s )); - - SLAP_SOCK_CLR_WRITE( s ); - slap_daemon.sd_nwriters--; - } - - ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex ); -#endif - WAKE_LISTENER(wake); -} - void slapd_clr_write( ber_socket_t s, int wake ) { @@ -985,26 +959,6 @@ slapd_set_write( ber_socket_t s, int wake ) WAKE_LISTENER(wake); } -int -slapd_ack_read( ber_socket_t s, int wake ) -{ -#ifdef SLAP_EVENT_ACK - int rc = 1; - ldap_pvt_thread_mutex_lock( &slap_daemon.sd_mutex ); - - if ( SLAP_SOCK_IS_ACTIVE( s )) { - SLAP_SOCK_CLR_READ( s ); - rc = 0; - } - ldap_pvt_thread_mutex_unlock( &slap_daemon.sd_mutex ); - if ( !rc ) - WAKE_LISTENER(wake); - return rc; -#else - return 0; -#endif -} - int slapd_clr_read( ber_socket_t s, int wake ) { @@ -2591,7 +2545,14 @@ slapd_daemon_task( } else if ( !w ) { Debug( LDAP_DEBUG_CONNS, "daemon: hangup on %d\n", fd, 0, 0 ); - connection_hangup( fd ); + if ( SLAP_SOCK_IS_ACTIVE( fd )) { +#ifdef HAVE_EPOLL + /* Don't keep reporting the hangup + */ + SLAP_EPOLL_SOCK_SET( fd, EPOLLET ); +#endif + connection_hangup( fd ); + } } } }