* 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