assert(bus);
assert(m);
+
+ if (!m->api_bus)
+ return;
+
assert(m->api_bus == bus);
m->request_api_bus_dispatch = status != DBUS_DISPATCH_COMPLETE;
assert(bus);
assert(m);
+
+ if (!m->system_bus)
+ return;
+
assert(m->system_bus == bus);
m->request_system_bus_dispatch = status != DBUS_DISPATCH_COMPLETE;
/* dbus_message_get_path(message)); */
if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
- log_error("Warning! D-Bus connection terminated.");
+ log_error("Warning! API D-Bus connection terminated.");
bus_done_api(m);
} else if (dbus_message_is_signal(message, DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
/* dbus_message_get_path(message)); */
if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) {
- log_error("Warning! D-Bus connection terminated.");
+ log_error("Warning! System D-Bus connection terminated.");
bus_done_system(m);
} if (dbus_message_is_signal(message, "org.freedesktop.systemd1.Agent", "Released")) {
unsigned bus_dispatch(Manager *m) {
assert(m);
- if (m->request_api_bus_dispatch)
- if (dbus_connection_dispatch(m->api_bus) == DBUS_DISPATCH_COMPLETE) {
+ if (m->request_api_bus_dispatch) {
+ if (dbus_connection_dispatch(m->api_bus) == DBUS_DISPATCH_COMPLETE)
m->request_api_bus_dispatch = false;
- return 1;
- }
- if (m->request_system_bus_dispatch)
- if (dbus_connection_dispatch(m->system_bus) == DBUS_DISPATCH_COMPLETE) {
+ return 1;
+ }
+
+ if (m->request_system_bus_dispatch) {
+ if (dbus_connection_dispatch(m->system_bus) == DBUS_DISPATCH_COMPLETE)
m->request_system_bus_dispatch = false;
- return 1;
- }
+
+ return 1;
+ }
return 0;
}
assert(bus);
dbus_connection_set_exit_on_disconnect(bus, FALSE);
+
if (!dbus_connection_set_watch_functions(bus, bus_add_watch, bus_remove_watch, bus_toggle_watch, m, NULL) ||
!dbus_connection_set_timeout_functions(bus, bus_add_timeout, bus_remove_timeout, bus_toggle_timeout, m, NULL))
return -ENOMEM;
m->system_bus = m->api_bus;
else {
if (!(m->system_bus = dbus_bus_get_private(DBUS_BUS_SYSTEM, &error))) {
- log_error("Failed to get D-Bus connection, retrying later: %s", error.message);
+ log_debug("Failed to get system D-Bus connection, retrying later: %s", error.message);
dbus_error_free(&error);
return 0;
}
+ dbus_connection_set_dispatch_status_function(m->system_bus, system_bus_dispatch_status, m, NULL);
+ m->request_system_bus_dispatch = true;
+
if ((r = bus_setup_loop(m, m->system_bus)) < 0) {
bus_done_system(m);
return r;
}
-
- dbus_connection_set_dispatch_status_function(m->system_bus, system_bus_dispatch_status, m, NULL);
}
if (!dbus_connection_add_filter(m->system_bus, system_bus_message_filter, m, NULL)) {
strnull(dbus_bus_get_unique_name(m->system_bus)));
dbus_free(id);
- m->request_system_bus_dispatch = true;
-
return 0;
}
m->api_bus = m->system_bus;
else {
if (!(m->api_bus = dbus_bus_get_private(m->running_as == MANAGER_SESSION ? DBUS_BUS_SESSION : DBUS_BUS_SYSTEM, &error))) {
- log_debug("Failed to get D-Bus connection, retrying later: %s", error.message);
+ log_debug("Failed to get API D-Bus connection, retrying later: %s", error.message);
dbus_error_free(&error);
return 0;
}
+ dbus_connection_set_dispatch_status_function(m->api_bus, api_bus_dispatch_status, m, NULL);
+ m->request_api_bus_dispatch = true;
+
if ((r = bus_setup_loop(m, m->api_bus)) < 0) {
bus_done_api(m);
return r;
}
-
- dbus_connection_set_dispatch_status_function(m->api_bus, api_bus_dispatch_status, m, NULL);
}
if (!dbus_connection_register_object_path(m->api_bus, "/org/freedesktop/systemd1", &bus_manager_vtable, m) ||
if (!(m->subscribed = set_new(string_hash_func, string_compare_func)))
return -ENOMEM;
- m->request_api_bus_dispatch = true;
-
return 0;
}
if (m->system_bus == m->api_bus)
m->system_bus = NULL;
+ dbus_connection_set_dispatch_status_function(m->api_bus, NULL, NULL, NULL);
dbus_connection_close(m->api_bus);
dbus_connection_unref(m->api_bus);
m->api_bus = NULL;
-
}
if (m->subscribed) {
bus_done_api(m);
if (m->system_bus) {
+ dbus_connection_set_dispatch_status_function(m->system_bus, NULL, NULL, NULL);
dbus_connection_close(m->system_bus);
dbus_connection_unref(m->system_bus);
m->system_bus = NULL;
if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, p->signature, &sub))
goto oom;
- if ((r = p->append(m, &sub, property, p->data)) < 0) {
+ if ((r = p->append(m, &sub, property, (void*) p->data)) < 0) {
if (r == -ENOMEM)
goto oom;
!dbus_message_iter_open_container(&sub2, DBUS_TYPE_VARIANT, p->signature, &sub3))
goto oom;
- if ((r = p->append(m, &sub3, p->property, p->data)) < 0) {
+ if ((r = p->append(m, &sub3, p->property, (void*) p->data)) < 0) {
if (r == -ENOMEM)
goto oom;