Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > DBus и upstart


Автор: Avtarkia 28.10.2010, 10:50
Написала демон. Добавила скриптик в нужную папочку, чтобы он запускался автоматически при запуске системы (по запуску dbus). Он запускается и работает.
В коде демона есть место, где он пытается подсоединиться к DBus, чтобы через сессионную шину запустить другое прилдожение.

Код

...
DBusConnection * connection;
  DBusError error;
  DBusMessage *call;
  dbus_error_init(&error);
  connection = dbus_bus_get(DBUS_BUS_SESSION, &error);

  if (connection == NULL)
  {
    WriteBuf("DBUS: can't setup connection: %s\n", error.message);

    dbus_error_free(&error);
    return;
  }
// запуск другого приложения с посощью dbus_message_new_method_call(...)
...


Метод dbus_bus_get возвращает NULL, а в ошибку ничего не записывает. Может, кто сталкивался с этим?

Интересно то, что есть демон просто запустить из консоли, то эта проблема исчезает. Может при upstart-е сессионаая шина недоступна?...

Автор: bsa 28.10.2010, 15:48
Avtarkia, upstart может запускать процессы одновременно. таким образом, в тот момент, когда у тебя начинает выполняться указанная функция, DBus может быть еще не запущен (или он еще не заработал). Делай несколько попыток подключения (с паузой в пару секунд) или явно пропиши в скрипте запуска зависимость от DBus.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)