Bug 10095 - pppd виснет при получении SIGTERM во время выполнения chat, etc.
: pppd виснет при получении SIGTERM во время выполнения chat, etc.
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/ppp)
: unstable
: all Linux
: P2 normal
Assigned To:
:
: http://ppp.samba.org/cgi-bin/ppp-bugs...
:
:
:
  Show dependency tree
 
Reported: 2006-10-06 10:23 by
Modified: 2010-06-12 12:00 (History)


Attachments
Бэкпорт из pppd 2.4.3 - создание linkpidfile при старте pppd (320 bytes, patch)
2006-10-06 10:25, Valentin Lavrinenko
no flags Details | Diff
Патч, который вроде как фиксит все указанные ошибки (3.40 KB, patch)
2006-10-06 10:28, Valentin Lavrinenko
no flags Details | Diff


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2006-10-06 10:23:35
1. Если pppd получает SIGTERM во время выполнения chat скрипта, он входит в
бесконенчный цикл, посылая сам себе этот сигнал. Причина - сигнал, отправленный
в то время, когда самим pppd он игнорируется, доставляется уже после того, как
pppd снова начинает его смотреть. Решено в ppp-2.4.2-alt-killmypg.patch, но мое
решение мне нравится больше :)

2. Если SIGTERM отправлен до запуска chat'а, то замечает его pppd только после
того, как chat завершится. LCP сессия после этого подвисает. Причина - хотя в
ф-ции connect_tty() и проверяется переменная kill_link, она не может быть
выставлена, т.к. не вызывается handle_events().

2. Если вызвать pppd например на /dev/ttyS0, на котором в данный момент нет
модема, то после отвала chat'а по таймауту pppd не завершается, убить его можно
только SIGKILL'ом. После одного SIGTERM'а выводит что-то насчет tcsetattr:
interrupted system call, на последующие не реагирует. Причина - вызов tcsetattr
похоже виснет, если указан параметр TCSAFLUSH, а флашить некуда. Мое решение
(замена TCSAFLUSH на TCSANOW) мне не нравится, но лучшего не придумал.
Steps to Reproduce:
*.1. Пересобрать pppd с моим патчем - бэкпортом фичи из версии 2.4.3 - создание
linkpidfile при запуске pppd, а не после установки соединения. Тогда, используя
netscripts, после ifup ppp0 можно сразу давить ^C, и pppd получит SIGTERM.
*.2. Прописать все нужные настройки для ppp0 (в т.ч. DEBUG=yes) и включить
модем.
1.3. ifup ppp0, подождать пару секунд и нажать ^C.
2.3. ifup ppp0, и очень быстро нажать ^C.
3.3. Выключить модем, ifup ppp0, дождаться обвала chat по таймауту (см. 12-ю
коснсоль). После этого нажать ^C.
Actual Results:  
1. pppd не завершается, порт занят.
2. pppd не завершается, порт занят.
3. pppd не завершается и не убивается иначе как SIGKILL'ом, порт занят.

Expected Results:  
1. pppd завершился, порт свободен.
2. pppd завершился, порт свободен.
3. pppd завершился, порт свободен. Или хотя бы убился SIGTERM'ом.
------- Comment #1 From 2006-10-06 10:25:09 -------
Created an attachment (id=1656) [details]
Бэкпорт из pppd 2.4.3 - создание linkpidfile при старте pppd
------- Comment #2 From 2006-10-06 10:28:42 -------
Created an attachment (id=1657) [details]
Патч, который вроде как фиксит все указанные ошибки

Патч не накатывается при накаченном ppp-2.4.2-alt-killmypg.patch, его надо
исключить из спека.
------- Comment #3 From 2006-10-06 11:54:28 -------
Change Product to Sisyphus
------- Comment #4 From 2006-10-06 21:09:30 -------
перевешиваю на текущего майнтейнера.
------- Comment #5 From 2006-10-10 21:31:04 -------
2 sr: забираем?
------- Comment #6 From 2006-11-22 13:34:01 -------
2 mithraen: смотрю, у тебя в git забрано?
------- Comment #7 From 2007-03-25 22:47:55 -------
В 2.4.2 да, у меня это было забрано. С 2.4.4 будем разбираться.
------- Comment #8 From 2007-12-08 19:50:54 -------
В 2.4.4-alt9 наблюдаю:

Patch16: ppp-2.4.2-lvu-linkpidfile-backport.patch
Patch17: ppp-2.4.4-lvu-sigterm.patch
# ...

# patch16 -p1
%patch17 -p1

Если 16 -- это бэкпорт из 2.4.3, то по идее уже неактуален, а второй приложен =>
закрываю как FIXED.
------- Comment #9 From 2007-12-08 19:51:41 -------
*** Bug 8312 has been marked as a duplicate of this bug. ***
------- Comment #10 From 2010-06-12 12:00:24 -------
Истории ради: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=100028