1 Jan 2004 23:53
CVS 20040201, "Terminating on signal 2" loop
James Cameron <james.cameron <at> hp.com>
2004-01-01 22:53:59 GMT
2004-01-01 22:53:59 GMT
I was just giving PPP in CVS a test run, started a connection through a
pty, which established normally, and then pressed Control/C. pppd then
reported "Terminating on signal 2." 10376 times and segfaulted.
Quite reproducible. So I did an strace and looked at the source. On
receipt of a SIGINT from Control/C, term() calls kill_my_pg() to signal the
process group.
It appears that despite kill_my_pg() calling sigaction() to ignore the
signal being resent to the process group, the kernel sends pppd a SIGINT
again.
667 --- SIGINT (Interrupt) <at> 0 (0) ---
667 time([1072996209]) = 1072996209
667 getpid() = 667
667 rt_sigaction(SIGPIPE, {0x4013ebe0, [], SA_RESTORER, 0x40094498},
{SIG_IGN}
, 8) = 0
667 send(3, "<30>Jan 2 09:30:09 pppd[667]: T"..., 55, 0) = 55
667 rt_sigaction(SIGPIPE, {SIG_IGN}, NULL, 8) = 0
667 write(2, "Terminating on signal 2.", 24) = 24
667 write(2, "\n", 1) = 1
667 rt_sigaction(SIGINT, {SIG_IGN}, {0x8050290, [HUP INT USR2 TERM
CHLD], SA_R
ESTORER, 0x40094498}, 8) = 0
667 kill(0, SIGINT) = 0
667 rt_sigaction(SIGINT, {0x8050290, [HUP INT USR2 TERM CHLD],
SA_RESTORER, 0x
40094498}, NULL, 8) = 0
667 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
(Continue reading)
I will use your patch *and* change our
serial driver.
Thank you also for answering my question about ppp_write() being the place
to set skb->priority for control packets. If ppp_write() handles traffic
from the daemon only, it seems resonable to set TC_PRIO_CONTROL for
everything passing through it.
RSS Feed