about summary refs log tree commit diff
path: root/nscd/connections.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-04-01 18:51:15 +0000
committerUlrich Drepper <drepper@redhat.com>2006-04-01 18:51:15 +0000
commit9388dcbb84dd616b20823ac46c8630b8c2845a82 (patch)
treed97ec2fd5109de9bb8f367b9e1b42178e3d081b8 /nscd/connections.c
parent1329b60176b59b185ad71fc87a86dd0cf9cff21b (diff)
downloadglibc-9388dcbb84dd616b20823ac46c8630b8c2845a82.tar.gz
glibc-9388dcbb84dd616b20823ac46c8630b8c2845a82.tar.xz
glibc-9388dcbb84dd616b20823ac46c8630b8c2845a82.zip
[BZ #2498]
2006-04-01  Ulrich Drepper  <drepper@redhat.com>
	[BZ #2498]
	* nscd/connections.c (main_loop_poll): If the connection cannot be
	accepted because of user-imposed limits close the descriptor.
Diffstat (limited to 'nscd/connections.c')
-rw-r--r--nscd/connections.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/nscd/connections.c b/nscd/connections.c
index 802b7c02d2..d975b1818f 100644
--- a/nscd/connections.c
+++ b/nscd/connections.c
@@ -1556,18 +1556,24 @@ main_loop_poll (void)
 	      /* We have a new incoming connection.  Accept the connection.  */
 	      int fd = TEMP_FAILURE_RETRY (accept (sock, NULL, NULL));
 
-	      /* use the descriptor if we have not reached the limit.  */
-	      if (fd >= 0 && firstfree < nconns)
+	      /* Use the descriptor if we have not reached the limit.  */
+	      if (fd >= 0)
 		{
-		  conns[firstfree].fd = fd;
-		  conns[firstfree].events = POLLRDNORM;
-		  starttime[firstfree] = now;
-		  if (firstfree >= nused)
-		    nused = firstfree + 1;
-
-		  do
-		    ++firstfree;
-		  while (firstfree < nused && conns[firstfree].fd != -1);
+		  if (firstfree < nconns)
+		    {
+		      conns[firstfree].fd = fd;
+		      conns[firstfree].events = POLLRDNORM;
+		      starttime[firstfree] = now;
+		      if (firstfree >= nused)
+			nused = firstfree + 1;
+
+		      do
+			++firstfree;
+		      while (firstfree < nused && conns[firstfree].fd != -1);
+		    }
+		  else
+		    /* We cannot use the connection so close it.  */
+		    close (fd);
 		}
 
 	      --n;