summaryrefslogtreecommitdiffstats
path: root/src/core/swap.c
diff options
context:
space:
mode:
authorMike Yuan <me@yhndnzj.com>2024-03-22 11:26:55 +0100
committerMike Yuan <me@yhndnzj.com>2024-03-22 11:30:39 +0100
commitba31a5018f99864c22dd4e0f10712456c7abc934 (patch)
tree8f3da29153d2ee3c90ad7639af23098a71cf7764 /src/core/swap.c
parentMerge pull request #31868 from bluca/test_cleanup (diff)
downloadsystemd-ba31a5018f99864c22dd4e0f10712456c7abc934.tar.xz
systemd-ba31a5018f99864c22dd4e0f10712456c7abc934.zip
core/swap: fix memory management in swap_setup_unit
Follow-up for e9fa1bf704ad2f0a7e257e29889315118b0df459
Diffstat (limited to 'src/core/swap.c')
-rw-r--r--src/core/swap.c50
1 files changed, 17 insertions, 33 deletions
diff --git a/src/core/swap.c b/src/core/swap.c
index e2019587ff..afd067f0e0 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -374,11 +374,10 @@ static int swap_setup_unit(
int priority,
bool set_flags) {
+ _cleanup_(unit_freep) Unit *new = NULL;
_cleanup_free_ char *e = NULL;
- bool new;
Unit *u;
Swap *s;
- SwapParameters *p;
int r;
assert(m);
@@ -395,43 +394,34 @@ static int swap_setup_unit(
if (s->from_proc_swaps &&
!path_equal(s->parameters_proc_swaps.what, what_proc_swaps))
- return log_error_errno(SYNTHETIC_ERRNO(EEXIST),
- "Swap %s appeared twice with different device paths %s and %s, refusing.",
- e, s->parameters_proc_swaps.what, what_proc_swaps);
-
- new = false;
+ return log_unit_error_errno(u, SYNTHETIC_ERRNO(EEXIST),
+ "Swap appeared twice with different device paths %s and %s, refusing.",
+ s->parameters_proc_swaps.what, what_proc_swaps);
} else {
- new = true;
-
- r = unit_new_for_name(m, sizeof(Swap), e, &u);
- if (r < 0) {
- log_unit_warning_errno(u, r, "Failed to load swap unit: %m");
- goto fail;
- }
+ r = unit_new_for_name(m, sizeof(Swap), e, &new);
+ if (r < 0)
+ return log_warning_errno(r, "Failed to load swap unit '%s': %m", e);
+ u = new;
s = ASSERT_PTR(SWAP(u));
s->what = strdup(what);
- if (s->what) {
- r = log_oom();
- goto fail;
- }
+ if (!s->what)
+ return log_oom();
unit_add_to_load_queue(u);
}
- p = &s->parameters_proc_swaps;
+ SwapParameters *p = &s->parameters_proc_swaps;
- if (!s->parameters_proc_swaps.what) {
+ if (!p->what) {
p->what = strdup(what_proc_swaps);
- if (!p->what) {
- r = log_oom();
- goto fail;
- }
+ if (!p->what)
+ return log_oom();
}
- /* The unit is definitely around now, mark it as loaded if it was previously referenced but could not be
- * loaded. After all we can load it now, from the data in /proc/swaps. */
+ /* The unit is definitely around now, mark it as loaded if it was previously referenced but
+ * could not be loaded. After all we can load it now, from the data in /proc/swaps. */
if (IN_SET(u->load_state, UNIT_NOT_FOUND, UNIT_BAD_SETTING, UNIT_ERROR)) {
u->load_state = UNIT_LOADED;
u->load_error = 0;
@@ -439,7 +429,7 @@ static int swap_setup_unit(
if (set_flags) {
s->is_active = true;
- s->just_activated = !SWAP(u)->from_proc_swaps;
+ s->just_activated = !s->from_proc_swaps;
}
s->from_proc_swaps = true;
@@ -449,12 +439,6 @@ static int swap_setup_unit(
unit_add_to_dbus_queue(u);
return 0;
-
-fail:
- if (!new)
- unit_free(u);
-
- return r;
}
static void swap_process_new(Manager *m, const char *device, int prio, bool set_flags) {