http://bugzilla.spamassassin.org/show_bug.cgi?id=4258
------- Additional Comments From [EMAIL PROTECTED] 2005-04-14 18:56 -------
wierd -- not seeing any problem here :( check it out...
let's start halfway through.
cast of characters:
fd 5 = accept fd
fd 6 = control channel to child 66451
fd 7 = " " 66443
write(2, "prefork: child states: IB\n", 26) = 26
one child is processing, the other one's idle
select(16, [5 6 7], NULL, [5 6 7], {2, 0}) = 1 (in [6])
read(6, "I66451\n", 8192) = 7
child 66451 says "I'm idle"
write(2, "prefork: child states: II\n", 26) = 26
prefork master says, "ok, we don't need two kids, we're idle"
kill(66451, SIGINT <unfinished ...>
--- SIGCHLD (Child exited) ---
--- SIGCHLD (Child exited) ---
<... kill resumed> ) = 0
sigreturn(0x9ebff7a0) = 0
select(8, [4], NULL, [4], {0, 0}) = 0 (Timeout)
write(4, "<22>spamd[66218]: server hit by "..., 41) = 41
wait4(-1, [WIFSIGNALED(s) && WTERMSIG(s) == SIGINT], WNOHANG, NULL) = 66451
select(8, [4], NULL, [4], {0, 0}) = 0 (Timeout)
write(4, "<22>spamd[66218]: handled cleanu"..., 54) = 54
wait4(-1, 0x9ebff7dc, WNOHANG, NULL) = 0
select(16, [5 6 7], NULL, [5 6 7], {2, 0}) = 1 (in [6])
read(6, "", 8192) = 0
close(-1) = -1 EBADF (Bad file descriptor)
close(6) = 0
write(2, "prefork: child states: I\n", 25) = 25
and there's 1 idle child.
select(16, [5 7], NULL, [5 7], {2, 0}) = 1 (in [5])
write(7, "A\n", 2) = 2
activity on the accept socket -- tells the child on fd 7 to accept...
read(7, "B66443\n", 8192) = 7
child says "I'm busy"
select(16, [5 7], NULL, [5 7], {2, 0}) = 1 (in [7])
read(7, "I66443\n", 8192) = 7
child finishes processing and says "I'm idle".
write(2, "prefork: child states: I\n", 25) = 25
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
select(16, [5 7], NULL, [5 7], {2, 0}) = 0 (Timeout)
and repeat until eventually killed.
So in other words, the master spamd is not getting hung -- it really is
selecting on the accept fd. But there's no activity arriving on that fd, which
is obviously incorrect?!
right now, I'm stumped as to how a select on the accept() fd could *fail*
to notice activity, if there is activity there, and that select() call looks
100% fine to me (unless BSD has changed its semantics somewhere since BSD
4.3...)
Could you retry again, using strace -ft (follow forks, add time)? maybe there's
something in the kid's straces that'll help.
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.