Henrik Nordström wrote:
fre 2010-04-02 klockan 15:41 -0300 skrev Marcus Kool:

strange indeed, but this is strace output with which I am not very familiar.
Strace should print the whole array that it uses as argument to
epoll_wait or just prints the first element ?  (and the 2nd argument
could be FD 27)

For epoll_wait it prints the valid entries in the result array, which
has length 1 in this case (see return value last on the line).

Can you please use cachemgr to view the current filedescriptors page to
note what fd 23 & fd 27 is being used for?
I restarted Squid and now it does not loop...
The lsof output in the original email is of little help:

A little. Both are pipes. And it's not unlikely these pipes have the
same fd assignments now after restart. What does cachemgr say now?

I use this Squid at home and it lightly used so maybe it does have
the same FDs allocated after a restart...
Cachemgr gives this (after the restart):

Active file descriptors:
File Type   Tout Nread  * Nwrite * Remote Address        Description
---- ------ ---- -------- -------- --------------------- 
------------------------------
   5 Log       0       0        0                        
/local/squid/logs/cache.log
   7 Socket    0    1275      241  .0                    DNS Socket
   8 Pipe      0      63     9934                        ufdbgclient #1
   9 Pipe      0       0*       0                        ufdbgclient #2
  10 Pipe      0       0*       0                        ufdbgclient #3
  11 Pipe      0       0*       0                        ufdbgclient #4
  12 Pipe      0       0*       0                        ufdbgclient #5
  13 Pipe      0       0*       0                        ufdbgclient #6
  14 Pipe      0       0*       0                        ufdbgclient #7
  15 Pipe      0       0*       0                        ufdbgclient #8
  16 Pipe      0       0*       0                        ufdbgclient #9
  17 Pipe      0       0*       0                        ufdbgclient #10
  18 Pipe      0       0*       0                        ufdbgclient #11
  19 Pipe      0       0*       0                        ufdbgclient #12
  20 File      0       0     8242                        
/local/squid/logs/access.log
  21 Pipe      0       0        0                        unlinkd -> squid
  22 File      0       0      312                        
/local/squid/cache/swap.state
23 Socket 1440 848* 0 10.2.2.9.56505 http://srv004.home01.urlfilterdb.com/Squid/cgi-bin/cachemgr.cgi
  24 Pipe      0       0        0                        squid -> unlinkd
  25 Socket    0       0        0  .0                    HTTP Socket
26 Socket 2 0* 1794 10.2.2.9.80 http://srv004.home01.urlfilterdb.com/Squid/cgi-bin/cachemgr.cgi 27 Socket 1440 170* 0* 127.0.0.1.35576 cache_object://localhost/filedescriptors
  28 Pipe      0       0*       0                        async-io completetion 
event: main
  29 Pipe      0       0        0                        async-io completetion 
event: threads

squid   13665 squid   20w   REG                9,3  1478687 4718702 
/local/squid/logs/access.log
squid   13665 squid   21r  FIFO                0,6          1723502 pipe
squid 13665 squid 22w REG 9,3 30400812 4718715 /local/squid/cache/swap.state
squid   13665 squid   23r  FIFO                0,6          1723506 pipe
squid   13665 squid   24w  FIFO                0,6          1723503 pipe
squid   13665 squid   25u  IPv4            1723505              TCP *:squid 
(LISTEN)
squid   13665 squid   26w  FIFO                0,6          1723506 pipe
squid   13665 squid   27r  FIFO                0,6          1723507 pipe        
FD 27 *****
squid   13665 squid   28w  FIFO                0,6          1723507 pipe
squid 13665 squid 29u IPv4 1771231 TCP srv004:squid->xxx (ESTABLISHED)

It seems that FD 27 and 28 point to the same object (as FD 23 and FD 26)

Hmm..

The strace output lists the parameters at the call time and
we do not see the return values (only the function return value).

Should be return values. strace knows how epoll_wait works.

Is it possible that FD 27 has an EPOLLERR condition instead of a
EPOLLIN condition and the loop is caused by trying to do read() on FD 27 ?
(I do not see any check for a return of EPOLLERR in the sources).

read should not return EAGAIN if there is an pending error condition.
>
Regards
Henrik



Reply via email to