Date: Tue, 27 Jan 1998 15:56:41 +0900 From: Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> To: Randy Terbush <randy@covalent.net> Cc: dyson@FreeBSD.ORG, brian@worldcontrol.com, current@FreeBSD.ORG, yokota@zodiac.mech.utsunomiya-u.ac.jp Subject: Re: Cyclades/Hylafax/SMP select problems? Message-ID: <199801270656.PAA14809@zodiac.mech.utsunomiya-u.ac.jp> In-Reply-To: Your message of "Mon, 26 Jan 1998 05:20:32 CST." <19980126052032B.randy@covalent.net> References: <199801261014.FAA00431@dyson.iquest.net> <19980126052032B.randy@covalent.net>
next in thread | previous in thread | raw e-mail | index | archive | help
>"John S. Dyson" <dyson@FreeBSD.ORG> wrote: >> > > The Hylafax faxgetty and faxq processes spin out of control >> > > chewing up nearly 100% CPU. The same configuration ran without >> > > problems on a single P5 machine running 2.2-STABLE. >> > > >> > > As I begin to dig deeper into this, are there any know problems >> > > with this mix? >> > >> > Just thought you'd like to know you are not alone. faxq on >> > my SMP system does the same thing. >> > >> Sometimes the output of ktrace or truss can be useful. Also the >> contents of /proc/<pid>/map sometimes helps with hints as to >> what is going on. > >Seems that a change to open the FIFO O_RDWR solves the problem. >Apparently, select() is returning when it should not be. Or, select() is returning a wrong value.. Would try the following patch and see if it helps? It applies to /sys/kern/sys_generic.c and make select() correctly returns -1 if an error occurred. Kazu Index: sys_generic.c =================================================================== RCS file: /src/CVS/src/sys/kern/sys_generic.c,v retrieving revision 1.33 diff -u -r1.33 sys_generic.c --- sys_generic.c 1997/11/23 10:30:50 1.33 +++ sys_generic.c 1998/01/27 06:38:34 @@ -542,6 +542,7 @@ int s, ncoll, error, timo; u_int nbufbytes, ncpbytes, nfdbits; + p->p_retval[0] = -1; if (uap->nd < 0) return (EINVAL); if (uap->nd > p->p_fd->fd_nfiles) @@ -673,8 +674,10 @@ while ((j = ffs(bits)) && (fd = i + --j) < nfd) { bits &= ~(1 << j); fp = fdp->fd_ofiles[fd]; - if (fp == NULL) + if (fp == NULL) { + p->p_retval[0] = -1; return (EBADF); + } if ((*fp->f_ops->fo_poll)(fp, flag[msk], fp->f_cred, p)) { obits[msk][(fd)/NFDBITS] |=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199801270656.PAA14809>