|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Andrey Melnikoff 2:5020/400 16 Aug 2005 22:00:06 To : Slava Astashonok Subject : Re: samba уже подзадолбала -------------------------------------------------------------------------------- Slava Astashonok <sla@0n.ru> wrote: SA> Andrey Melnikoff wrote: >> SA> 1. Что это за реентер такой, откуда он может взяться в нетредовом >> SA> приложении? И я сильно сомневаюсь в том, что это обработчик какого-то >> SA> сигнала вызывает функцию из libldap_r. >> Автор библиотеки занет про то, что она реентрабельна. И может дергать сам >> себя. SA> Автор библиотеки специально обвязал её мутекс-обёртками чтобы добиться SA> нереентрантности? ;) Кстати, суфикс "_r" в названии библиотеки традиционно SA> означает её реентрантность. Реентрабельность может достигаться за счет мутексов или без их использования. Тем более, что линковка (даже динамическая) с libpthread у софтины которая никогда ничего про треды незнала - может вызывать изощренные глюки на ровном месте. >> SA> 2. Даже если это дидлок, то при чём тут select()? >> А ты уверен, что gdb не врёт? SA> Скажем так, у меня нет оснований ему не верить. Тем более, что по я SA> диагонали ознакомился с текстом nss-ldap и libldap и по логике мельтешений SA> select() -> процесс -> select() там быть не должно. кто сказал что select() -> чтото -> select()? >>>>EIP; c012073d <release_task+1fd/230> <===== >> >> >> Trace; c012073d <release_task+1fd/230> >> Trace; c0106582 <sys_rt_sigsuspend+122/160> >> Trace; c0107717 <system_call+33/38> >> Proc; sendmail >> >> Hайди здесь, где задача находилась в момент снятия трейса? SA> Блин, так есть там дидлок или нет? Какой может быть трейс у SA> дидлоченного процесса? Любой. Я проше еще раз - покажите, где находился этот процесс в момент снятия трейса. >> # sleep 10 & ps -C "sleep 10" l >> [1] 1163 >> F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND >> 0 0 1163 741 14 0 3376 568 nanosl S pts/4 0:00 sleep 10 >> >> У тебя System.map в /boot/ наличиствует? SA> Разумеется. Кое-где wchan в выводе ps присутствует, но не везде: SA> 5 1001 32175 32173 15 0 6160 1988 - S ? 0:00 sshd: SA> sla@ 0 1001 32176 32175 16 0 3200 2016 wait4 Ss pts/1 0:01 SA> -bash 0 1001 32195 32176 16 0 2536 912 pause S+ pts/1 0:00 SA> screen -rd Hу и прекрасно. Оно не в ядре, что покажет тебе ps ? >> PS: Как опять повиснет, возми запусти "starce -p повисшый-pid -s 128 -o >> trace", с дркгой консоли попинвй это самый повисший-pid сигналами типа HUP, >> TERM, USR1. Выхлоп от starce (trace) покажи сюды. SA> Если он будет. Сомневаюсь, что smbd удасться вышибить из этого select() SA> сигналом, так как тот же SIGTERM ни в nss-ldap ни в libldap не блокируется и SA> альтернативный обработчик на него не ставится, как и в самом smbd, однако же SA> в какой-то момент он перестаёт регировать на этот сигнал. Вот SA> оборвать соединение с ldap-сервером можно попробовать. Вот-вот. Тебе открыть страшную тайну, что когда у тебя что-то слинкованно с libpthread, ld заменяе всякие signal(), sigaction() и всё остальное - функциями из libpthread. Функции из libpthread всегда ставят свой альтернативный sa_restorer (причем - принудительно, если ты захочешь поиметь свой sa_restorer, ты всегда будешь вторым). sa_restorer занимается тем, что блокирует все сигналы за исключением SIGKILL (его нельзя заблокировать) и SIGRTMIN (он по нему переключает нити). Вот тебе и ответ - почему у тебя smbd не киляется кроме как SIGKILL. Посылать ему SIGRTMIN - бесполезно. Давай выхлоп от strace. --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/643801ef1de0.html, оценка из 5, голосов 10
|