Introduce _cleanup_(unit_freep)

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2018-03-09 21:34:28 +01:00
parent c70cac548a
commit dc409696cf
4 changed files with 11 additions and 17 deletions

View File

@ -1696,6 +1696,7 @@ int manager_load_unit_prepare(
sd_bus_error *e,
Unit **_ret) {
_cleanup_(unit_freep) Unit *cleanup_ret = NULL;
Unit *ret;
UnitType t;
int r;
@ -1728,29 +1729,26 @@ int manager_load_unit_prepare(
return 1;
}
ret = unit_new(m, unit_vtable[t]->object_size);
ret = cleanup_ret = unit_new(m, unit_vtable[t]->object_size);
if (!ret)
return -ENOMEM;
if (path) {
ret->fragment_path = strdup(path);
if (!ret->fragment_path) {
unit_free(ret);
if (!ret->fragment_path)
return -ENOMEM;
}
}
r = unit_add_name(ret, name);
if (r < 0) {
unit_free(ret);
if (r < 0)
return r;
}
unit_add_to_load_queue(ret);
unit_add_to_dbus_queue(ret);
unit_add_to_gc_queue(ret);
*_ret = ret;
cleanup_ret = NULL;
return 0;
}

View File

@ -128,7 +128,7 @@ Unit *unit_new(Manager *m, size_t size) {
}
int unit_new_for_name(Manager *m, size_t size, const char *name, Unit **ret) {
Unit *u;
_cleanup_(unit_freep) Unit *u = NULL;
int r;
u = unit_new(m, size);
@ -136,12 +136,11 @@ int unit_new_for_name(Manager *m, size_t size, const char *name, Unit **ret) {
return -ENOMEM;
r = unit_add_name(u, name);
if (r < 0) {
unit_free(u);
if (r < 0)
return r;
}
*ret = u;
u = NULL;
return r;
}

View File

@ -610,6 +610,7 @@ DEFINE_CAST(SCOPE, Scope);
Unit *unit_new(Manager *m, size_t size);
void unit_free(Unit *u);
DEFINE_TRIVIAL_CLEANUP_FUNC(Unit *, unit_free);
int unit_new_for_name(Manager *m, size_t size, const char *name, Unit **ret);
int unit_add_name(Unit *u, const char *name);

View File

@ -114,7 +114,7 @@ static void test_config_parse_exec(void) {
ExecCommand *c = NULL, *c1;
const char *ccc;
_cleanup_(manager_freep) Manager *m = NULL;
Unit *u = NULL;
_cleanup_(unit_freep) Unit *u = NULL;
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
if (MANAGER_SKIP_TEST(r)) {
@ -441,8 +441,6 @@ static void test_config_parse_exec(void) {
assert_se(c == NULL);
exec_command_free_list(c);
unit_free(u);
}
static void test_config_parse_log_extra_fields(void) {
@ -461,7 +459,7 @@ static void test_config_parse_log_extra_fields(void) {
int r;
_cleanup_(manager_freep) Manager *m = NULL;
Unit *u = NULL;
_cleanup_(unit_freep) Unit *u = NULL;
ExecContext c = {};
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
@ -506,8 +504,6 @@ static void test_config_parse_log_extra_fields(void) {
exec_context_free_log_extra_fields(&c);
unit_free(u);
log_info("/* %s bye */", __func__);
}