Re: file descripter leak in current with Qmail?

From: Robert Watson <rwatson_at_freebsd.org>
Date: Mon, 7 Jun 2004 15:42:33 -0400 (EDT)
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_at_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
_at__at_ -285,7 +285,7 _at__at_
 	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) {
_at__at_ -296,14 +296,14 _at__at_
 		    "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"));
Received on Mon Jun 07 2004 - 17:43:41 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:56 UTC