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'ом.
Created attachment 1656 [details] Бэкпорт из pppd 2.4.3 - создание linkpidfile при старте pppd
Created attachment 1657 [details] Патч, который вроде как фиксит все указанные ошибки Патч не накатывается при накаченном ppp-2.4.2-alt-killmypg.patch, его надо исключить из спека.
Change Product to Sisyphus
перевешиваю на текущего майнтейнера.
2 sr: забираем?
2 mithraen: смотрю, у тебя в git забрано?
В 2.4.2 да, у меня это было забрано. С 2.4.4 будем разбираться.
В 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.
*** Bug 8312 has been marked as a duplicate of this bug. ***
Истории ради: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=100028