Dmitry V. Levin пишет: > On Sun, Oct 02, 2005 at 02:19:07PM +0400, Vladimir Lettiev wrote: >>Я сделал патч для IPC::ShareLite. >>Как мне показалось проблема в том, что данный модуль сначала делает >>shmdt() и лишь после пытается метить сегмент флагом IPC_RMID. Попробовал >>поменять порядок и вроде как заработало. >>Если кто-то может его прокомментировать, welcome. Как оказалось проблема была в том, что происходила попытка подключения к сегменту, который был удалён. > Патч без контекста не очевиден, но то, что вы предлагаете сделать, логично > и, насколько я понимаю, должно работать на всех ядрах. Сложность в том, что IPC::ShareLite позволяет создавать сегмент, который может как удаляться, после отработки программы, так и нет (зачем это надо, не знаю). Видимо придётся фиксить также все программы, которые захотят использовать последнюю возможность этого модуля. Патч я переделал. Теперь модуль проходит как собственные тесты, так и тесты других приложений, которые его используют (например, perl-Cache-Cache). Возможно ошибки всё же всплывут, но по крайне мере удалось исключить зависание, за счёт использования вместо semop() вызова semtimedop(), который позволяет задать время таймаута. Смысл патча^Wхака в том, чтобы не детачится от сегмента, если число подключений меньше двух. И проверять перед унижтожением сегмента, что он уже не был уничтожен раньше, чтобы не нервировать shmat(). p.s. Исправленый пакет с этим патчем я уже залил в incoming. -- С уважением, Владимир Леттиев aka crux