Либо я совсем тупой, либо одно из двух. Пытаюсь отловить перезапуск hal и dbus в своей софтине. Код честно стырил из ivman (pulseaudio и powersaved с hal не работают). План действий следующий: 1. Говорим DBus'у не делать _exit() при отвале коннекта. 2. Вешаем обработчик сигнала от DBus. По сигналу Disconnected от DBus unref'им открытый коннект и ставим в mainloop вызов процедуры реконнекта. Я пытался в этом месте звать ещё и libhal_ctx_shutdown(), но ловил сегфолт. Процедура реконнекта будет вызываться периодически, пока коннект не появится (делается средствами glib). По сигналу NameOwnerChanged от org.freedesktop.Hal если: 1. Старый owner валидный, а новый нет - зовём libhal_ctx_shutdown(). 2. Старый owner не валидный, а новый валидный - опять инитим hal. Это всё есть в сорцах ivman. Проблема в следующем: Если сразу перезапустить DBus, моя софтина получает NameOwnerChanged от Hal и сегфолтится. Если перезапустить Hal, софтина получает два NameOwnerChanged и работает дальше. Если сначала перезапустить Hal, а потом сколько угодно раз перезапускать DBus, то при перезапуске DBus будет ловиться Disconnected и программа работает нормально. Если отключить пляски с Hal картина будет следующая: При первом перезапуске DBus будут вызываться: NameOwnerChanged со смыслом "Hal ушёл" Disconnected от DBus NameOwnerChanged со смыслом "Hal пришёл" При последующих перезапусках DBus сигнал "Hal ушёл" ко мне попадать не будет. Собсно, вопрос. Что с этим всем делать и не сегфолтится ли у кого ivman при перезапуске DBus? -- Regards, Sir Raorn.