On Tue, Oct 06, 2009 at 11:16:20PM +0400, Stanislav Maslovski wrote: > On Tue, Oct 06, 2009 at 08:49:50PM +0400, Alexander Galanin wrote: > > On Tue, 6 Oct 2009 00:40:26 +0400 > > Stanislav Maslovski <stanislav.maslov...@gmail.com> wrote: > > > > > Тут сначала надо бы разобраться необходимо ли вообще предохраняться > > > от race. В документации не очень внятно написано про порядок вызова > > > callouts для _разных_ устройств. Т.е., может ли быть так, что cleanup > > > скрипт еще не завершился (стартует по факту создания записи > > > /org/freedesktop/Hal/devices/computer), а hal-autofs(add) уже > > > выполняется (стартует по факту втыкания флешки). > > > > > > Кстати, как я сейчас вижу, мое "решение" вовсе не избавляет от этого > > > race condition, если на момент запуска hal-autofs(add) в /media/ > > > _отсутствует_ симлинк c именем `basename $UDI`. Нужен семафор. > > > > > > Второй момент -- может ли по каким-то причинам реализоваться ситуация, > > > когда hal-autofs(remove) еще не завершился, а hal-autofs(add) уже > > > стартовал для того же девайса (выдернули и тут же воткнули флешку). > > > От этого мое "решение" предохраняет (даже если удаление не отработает > > > то и зацикливание на ожидании не страшно -- hald прибивает подвисшие > > > callouts, и симлинк уже есть). > > > > (ехидно) Вот примерно об этом я и говорил, когда употребил слова > > "простой" и "понятный". > > Это как раз-таки ерунда. Сугубо техническая деталь. Решается одним > вопросом в рассылке h...@lists.freedesktop.org или прямым > экспериментом.
Поэкспериментировал. hald _сериализует_ вызов add/remove callouts для одного девайса, следовательно, сценарий 2 исключается. Вызов callouts для разных девайсов не сериализован (что разумно, иначе бы hald нещадно тупил при старте), поэтому сценарий 1 возможен. Но хитрость в том, что find в скрипте cleanup вызывается у меня с опцией -L (следовать симлинкам, про что я совсем забыл), поэтому, если по каким-то причинам скрипт cleanup протормозит и hal-autofs(add) отработает раньше и положит в /media свой симлинк, то когда find -L на него наткнется, произойдет активация механизма autofs в ядре, файловая система подмонтируется, симлинк окажется указывающим на корневой каталог устройства (т.е. на объект -type d, a не -type l) и в список на удаление не попадет. То есть, даже если cleanup скрипт отработает позже hal-autofs(add), это не приведет к удалению только что созданного симлинка. Так что все проще некуда и while со sleep-ом из скрипта можно смело удалить ;) -- Stanislav -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org