static bool cgm_dbus_connect(void) { DBusError dbus_error; dbus_error_init(&dbus_error); connection = dbus_connection_open_private(CGMANAGER_DBUS_SOCK, &dbus_error); if (!connection) { dbus_error_free(&dbus_error); return false; } dbus_connection_set_exit_on_disconnect(connection, FALSE); dbus_error_free(&dbus_error); cgroup_manager = nih_dbus_proxy_new(NULL, connection, NULL /* p2p */, "/org/linuxcontainers/cgmanager", NULL, NULL); if (!cgroup_manager) { NihError *nerr; nerr = nih_error_get(); nih_free(nerr); cgm_dbus_disconnect(); return false; } // force fd passing negotiation if (cgmanager_ping_sync(NULL, cgroup_manager, 0) != 0) { NihError *nerr; nerr = nih_error_get(); nih_free(nerr); cgm_dbus_disconnect(); return false; } return true; }
bool lxc_init_cgmanager(void) { DBusError dbus_error; DBusConnection *connection; dbus_error_init(&dbus_error); connection = nih_dbus_connect(CGMANAGER_DBUS_SOCK, cgmanager_disconnected); if (!connection) { NihError *nerr; nerr = nih_error_get(); ERROR("Error opening cgmanager connection at %s: %s", CGMANAGER_DBUS_SOCK, nerr->message); nih_free(nerr); dbus_error_free(&dbus_error); return false; } dbus_connection_set_exit_on_disconnect(connection, FALSE); dbus_error_free(&dbus_error); cgroup_manager = nih_dbus_proxy_new(NULL, connection, NULL /* p2p */, "/org/linuxcontainers/cgmanager", NULL, NULL); dbus_connection_unref(connection); if (!cgroup_manager) { NihError *nerr; nerr = nih_error_get(); ERROR("Error opening cgmanager proxy: %s", nerr->message); nih_free(nerr); return false; } active_cg_ops = &cgmanager_ops; // force fd passing negotiation if (cgmanager_ping_sync(NULL, cgroup_manager, 0) != 0) { NihError *nerr; nerr = nih_error_get(); ERROR("Error pinging cgroup manager: %s", nerr->message); nih_free(nerr); } return true; }