* Maxime Henrion <[EMAIL PROTECTED]> [000920 08:17] wrote:
>         Hi,
> 
> 
> I read the thread about the cpu hog problem of the internal identd
> problem and tried to reproduce it on my box. I did a truss on the inetd
> process and got this :
> 
> select(0x8,0xbfbff46c,0x0,0x0,0xbfbfd45c)  = 1 (0x1)
> ioctl(7,FIONREAD,0xbfbfd444)    = 0 (0x0)
> read(0x7,0xbfbfd46c,0x0)    = 0 (0x0)
> gettimeofday(0xbfbfd45c,0x0)    = 0 (0x0)
> [...]
> 
> a lot of times.
> 
> It seems it's a very common problem. The return value of read() is not
> checked against 0 (0 means that the other side disconnected) and so, it
> loops until the connection times out.
> 
> I will look at inetd sources to fix this bug as soon as possible and I
> think I will come shortly with a patch.

Give this a shot:

Index: builtins.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/inetd/builtins.c,v
retrieving revision 1.24
diff -u -u -r1.24 builtins.c
--- builtins.c  2000/07/12 20:49:06     1.24
+++ builtins.c  2000/09/20 14:55:01
@@ -478,7 +478,7 @@
                if (onreadlen > bufsiz)
                        onreadlen = bufsiz;
                ssize = read(s, &buf[size], (size_t)onreadlen);
-               if (ssize == -1)
+               if (ssize < 1)
                        iderror(0, 0, s, errno);
                bufsiz -= ssize;
                size += ssize;

-- 
-Alfred Perlstein - [[EMAIL PROTECTED]|[EMAIL PROTECTED]]
"I have the heart of a child; I keep it in a jar on my desk."


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-stable" in the body of the message

Reply via email to