Re: 1.2beta22 comm.c

From: Michael O'Reilly <michael@dont-contact.us>
Date: Thu, 04 Jun 1998 09:07:14 +0800

In message <199806031656.KAA20831@surf>, Duane Wessels writes:
> "Michael O'Reilly" writes:
>
> >
> >Anyone know why the lines
> >
> > if (fdIsHttpOrIcp(fd))
> > continue;
> >
> >appear in comm_select()/comm_poll()? The issue is that if an ICP
> >message is ever queued, a COMM_SELECT_WRITE handler is installed, but
> >never used...
> >
> >Probably, icpHandleUdp() should never install COMM_SELECT_* handlers,
> >and then the above check can be killed altogether (as they'll need
> >appear in the poll/select fd set).
>
> I assume you meant "as they'll *never* appear in the poll/select fd set"?

Yup. sorry. :(
 
> The incoming descriptors MUST be set for poll/select, otherwise
> if there is no other I/O, new connections will not be detected
> until select times out.

Good point. :) (forgot to conside the quiet cache).

There's still a bug in there, that the comm_incoming() won't call the
write handlers if they're installed, so queued ICP is never sent (and
the squid goes into a busy wait state because it select()s for writing
on the outgoing ICP fd, but never actually writes to it or removes the
write handler... )

The other thing is that checking for fdIsHttpOrIcp() inside the fd
loop is probably a little silly (well, for large caches it is), and it
would be faster to do
      FD_RESET(icpFd, &readfds); FD_RESET(icpFd, &writefds);
      ...
and the poll equiviliant before actually entering the loop.

Michael, whos box is sitting on 95% CPU used... :)
Received on Tue Jul 29 2003 - 13:15:50 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:11:48 MST