systemctl: use automatic cleanup
Introduce a helper method to unref dbus messages and use it.
This commit is contained in:
parent
67445f4e22
commit
d3b52baff9
|
@ -1318,3 +1318,9 @@ finish:
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void dbus_message_unref_p(DBusMessage **reply) {
|
||||||
|
if (*reply)
|
||||||
|
dbus_message_unref(*reply);
|
||||||
|
}
|
||||||
|
|
|
@ -213,3 +213,6 @@ int bus_method_call_with_reply(DBusConnection *bus,
|
||||||
DBusMessage **return_reply,
|
DBusMessage **return_reply,
|
||||||
DBusError *return_error,
|
DBusError *return_error,
|
||||||
int first_arg_type, ...);
|
int first_arg_type, ...);
|
||||||
|
|
||||||
|
void dbus_message_unref_p(DBusMessage **reply);
|
||||||
|
#define _cleanup_dbus_msg_unref_ __attribute__((cleanup(dbus_message_unref_p)))
|
||||||
|
|
|
@ -1441,22 +1441,22 @@ static void check_triggering_units(
|
||||||
DBusConnection *bus,
|
DBusConnection *bus,
|
||||||
const char *unit_name) {
|
const char *unit_name) {
|
||||||
|
|
||||||
DBusMessage *reply = NULL;
|
DBusMessage _cleanup_dbus_msg_unref_ *reply = NULL;
|
||||||
DBusMessageIter iter, sub;
|
DBusMessageIter iter, sub;
|
||||||
char *service_trigger = NULL;
|
char *service_trigger = NULL;
|
||||||
const char *interface = "org.freedesktop.systemd1.Unit",
|
const char *interface = "org.freedesktop.systemd1.Unit",
|
||||||
*triggered_by_property = "TriggeredBy";
|
*triggered_by_property = "TriggeredBy";
|
||||||
|
|
||||||
char *unit_path = NULL, *n = NULL;
|
char _cleanup_free_ *unit_path = NULL, *n = NULL;
|
||||||
bool print_warning_label = true;
|
bool print_warning_label = true;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
n = unit_name_mangle(unit_name);
|
n = unit_name_mangle(unit_name);
|
||||||
unit_path = unit_dbus_path_from_name(n ? n : unit_name);
|
unit_path = unit_dbus_path_from_name(n ? n : unit_name);
|
||||||
free(n);
|
|
||||||
if (!unit_path) {
|
if (!unit_path) {
|
||||||
log_error("Could not allocate dbus path.");
|
log_error("Could not allocate dbus path.");
|
||||||
goto finish;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = bus_method_call_with_reply (
|
r = bus_method_call_with_reply (
|
||||||
|
@ -1471,13 +1471,12 @@ static void check_triggering_units(
|
||||||
DBUS_TYPE_STRING, &triggered_by_property,
|
DBUS_TYPE_STRING, &triggered_by_property,
|
||||||
DBUS_TYPE_INVALID);
|
DBUS_TYPE_INVALID);
|
||||||
if (r)
|
if (r)
|
||||||
goto finish;
|
return;
|
||||||
|
|
||||||
if (!dbus_message_iter_init(reply, &iter) ||
|
if (!dbus_message_iter_init(reply, &iter) ||
|
||||||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
|
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
|
||||||
log_error("Failed to parse reply.");
|
log_error("Failed to parse reply.");
|
||||||
goto finish;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dbus_message_iter_recurse(&iter, &sub);
|
dbus_message_iter_recurse(&iter, &sub);
|
||||||
|
@ -1488,14 +1487,14 @@ static void check_triggering_units(
|
||||||
|
|
||||||
if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
|
if (dbus_message_iter_get_arg_type(&sub) != DBUS_TYPE_STRING) {
|
||||||
log_error("Failed to parse reply.");
|
log_error("Failed to parse reply.");
|
||||||
goto finish;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dbus_message_iter_get_basic(&sub, &service_trigger);
|
dbus_message_iter_get_basic(&sub, &service_trigger);
|
||||||
|
|
||||||
r = check_one_unit(bus, service_trigger, true);
|
r = check_one_unit(bus, service_trigger, true);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto finish;
|
return;
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
if (print_warning_label) {
|
if (print_warning_label) {
|
||||||
log_warning("Warning: Stopping %s, but it can still be activated by:", unit_name);
|
log_warning("Warning: Stopping %s, but it can still be activated by:", unit_name);
|
||||||
|
@ -1506,11 +1505,6 @@ static void check_triggering_units(
|
||||||
|
|
||||||
dbus_message_iter_next(&sub);
|
dbus_message_iter_next(&sub);
|
||||||
}
|
}
|
||||||
finish:
|
|
||||||
if (reply)
|
|
||||||
dbus_message_unref(reply);
|
|
||||||
|
|
||||||
free(unit_path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int start_unit_one(
|
static int start_unit_one(
|
||||||
|
|
Loading…
Reference in a new issue