[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
(ITS#4395) slapd in endless loop when opening to many connections
Full_Name: Ralf Haferkamp
Version: 2.3.19, HEAD
OS: Linux (Kernel 2.6)
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (212.95.111.71)
slapd is built to use epoll(). ulimit -n is 32 (Just for testing. The bug is
also there with larger values). I used a small test programm that just opens new
connection to the server. After it the server ran into the ulimit and I stopped
the test programm the slapd process is spinning in a endless loop an 99% cpu
utilization.
While trying to track the problem down I found that is spinning in the main
daemon loop and epoll_wait() is signaling activity on a single descriptor. The
revents for this descriptor are set to "EPOLLERR | EPOLLHUP" and this case in
not handled in the loop. (It only handles EPOLLIN and EPOLLOUT)
Now I could use some help how to fix this condition and correctly close and
delete the connection that is causing this.
The test programm:
int main () {
LDAP* ldap;
int res;
struct berval cred = { 0, ""};
int proto = 3;
int i;
ldap_set_option(NULL, LDAP_OPT_PROTOCOL_VERSION, &proto);
for ( i=0; i < 1024; i++) {
res = ldap_initialize(&ldap, "ldap://localhost");
res = ldap_sasl_bind_s(ldap, "", NULL, &cred, NULL, NULL, NULL);
if (res != LDAP_SUCCESS ) {
printf("Error\n");
}
}
}