Bug 10095

Summary: pppd виснет при получении SIGTERM во время выполнения chat, etc.
Product: Sisyphus Reporter: Valentin Lavrinenko <lvu>
Component: pppAssignee: Michael Shigorin <mike>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P2 CC: mike
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://ppp.samba.org/cgi-bin/ppp-bugs/expired?id=1285
Attachments:
Description Flags
Бэкпорт из pppd 2.4.3 - создание linkpidfile при старте pppd
none
Патч, который вроде как фиксит все указанные ошибки none

Description Valentin Lavrinenko 2006-10-06 10:23:35 MSD
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 Valentin Lavrinenko 2006-10-06 10:25:09 MSD
Created attachment 1656 [details]
Бэкпорт из pppd 2.4.3 - создание linkpidfile при старте pppd
Comment 2 Valentin Lavrinenko 2006-10-06 10:28:42 MSD
Created attachment 1657 [details]
Патч, который вроде как фиксит все указанные ошибки

Патч не накатывается при накаченном ppp-2.4.2-alt-killmypg.patch, его надо
исключить из спека.
Comment 3 Vladimir V. Kamarzin 2006-10-06 11:54:28 MSD
Change Product to Sisyphus
Comment 4 Alexey Voinov 2006-10-06 21:09:30 MSD
перевешиваю на текущего майнтейнера.
Comment 5 Michael Shigorin 2006-10-10 21:31:04 MSD
2 sr: забираем?
Comment 6 Michael Shigorin 2006-11-22 13:34:01 MSK
2 mithraen: смотрю, у тебя в git забрано?
Comment 7 Denis Smirnov 2007-03-25 22:47:55 MSD
В 2.4.2 да, у меня это было забрано. С 2.4.4 будем разбираться.
Comment 8 Michael Shigorin 2007-12-08 19:50:54 MSK
В 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 Michael Shigorin 2007-12-08 19:51:41 MSK
*** Bug 8312 has been marked as a duplicate of this bug. ***
Comment 10 Michael Shigorin 2010-06-12 12:00:24 MSD
Истории ради: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=100028