Bug 10095

Summary: pppd виснет при получении SIGTERM во время выполнения chat, etc.
Product: [Development] Sisyphus Reporter: Valentin Lavrinenko <lvu@uaservice.com.ua>
Component: pppAssignee: Denis Smirnov <mithraen@altlinux.org>
Status: CLOSED FIXED QA Contact: qa-sisyphus@altlinux.org
Severity: normal    
Priority: P2 CC: mike@altlinux.org, shaba@altlinux.org
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 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