Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Jun 2004 15:42:33 -0400 (EDT)
From:      Robert Watson <rwatson@freebsd.org>
To:        Arjan van Leeuwen <avleeuwen@piwebs.com>
Cc:        "David A. Benfell" <benfell@parts-unknown.org>
Subject:   Re: file descripter leak in current with Qmail?
Message-ID:  <Pine.NEB.3.96L.1040607154056.88690D-100000@fledge.watson.org>
In-Reply-To: <200406072141.09413.avleeuwen@piwebs.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Mon, 7 Jun 2004, Arjan van Leeuwen wrote:

> > > In terms of debugging it: your first task it to identify if there's one
> > > process that's holding all the fd's, or if it is distributed over many
> > > proceses.  After that, you want to track down what kind of fd is being
> > > left open, which may help you track down why it's left open...
> >
> > Just as I'm reading this, I'm seeing the same thing on my -CURRENT server,
> > which has a _very_ low load (atm, it's only routing the internet traffic
> > for 3 users and serving SMTP for 2 of them). I'm also running qmail. The
> > kernel is from June 6. How do I go about investigating this further?
> 
> Replying to myself -
> fstat shows all open files evenly distributed among the running processes.

It could be that this is related to the esd file descriptor leak problem
also being reported.  You might also try the attached patch.

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert@fledge.watson.org      Senior Research Scientist, McAfee Research

Index: uipc_syscalls.c
===================================================================
RCS file: /data/ncvs/src/sys/kern/uipc_syscalls.c,v
retrieving revision 1.187
diff -u -r1.187 uipc_syscalls.c
--- uipc_syscalls.c	7 Jun 2004 09:59:50 -0000	1.187
+++ uipc_syscalls.c	7 Jun 2004 19:38:39 -0000
@@ -285,7 +285,7 @@
 	if ((head->so_state & SS_NBIO) && TAILQ_EMPTY(&head->so_comp)) {
 		ACCEPT_UNLOCK();
 		error = EWOULDBLOCK;
-		goto done;
+		goto noconnection;
 	}
 	while (TAILQ_EMPTY(&head->so_comp) && head->so_error == 0) {
 		if (head->so_state & SS_CANTRCVMORE) {
@@ -296,14 +296,14 @@
 		    "accept", 0);
 		if (error) {
 			ACCEPT_UNLOCK();
-			goto done;
+			goto noconnection;
 		}
 	}
 	if (head->so_error) {
 		error = head->so_error;
 		head->so_error = 0;
 		ACCEPT_UNLOCK();
-		goto done;
+		goto noconnection;
 	}
 	so = TAILQ_FIRST(&head->so_comp);
 	KASSERT(!(so->so_qstate & SQ_INCOMP), ("accept1: so SQ_INCOMP"));



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1040607154056.88690D-100000>