You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.1 KiB
59 lines
2.1 KiB
From d35c27e44abcde252abddf369762dee8da309903 Mon Sep 17 00:00:00 2001 |
|
From: Yu Watanabe <watanabe.yu+github@gmail.com> |
|
Date: Tue, 10 May 2022 14:09:24 +0900 |
|
Subject: [PATCH] core/timer: fix memleak |
|
|
|
Fixes #23326. |
|
|
|
(cherry picked from commit d3ab7b8078944db28bc621f43dd942a3c878fffb) |
|
Related: #2087652 |
|
--- |
|
src/core/timer.c | 11 ++++++----- |
|
1 file changed, 6 insertions(+), 5 deletions(-) |
|
|
|
diff --git a/src/core/timer.c b/src/core/timer.c |
|
index a13b864741..0dc49dd46b 100644 |
|
--- a/src/core/timer.c |
|
+++ b/src/core/timer.c |
|
@@ -135,6 +135,7 @@ static int timer_add_trigger_dependencies(Timer *t) { |
|
} |
|
|
|
static int timer_setup_persistent(Timer *t) { |
|
+ _cleanup_free_ char *stamp_path = NULL; |
|
int r; |
|
|
|
assert(t); |
|
@@ -148,13 +149,13 @@ static int timer_setup_persistent(Timer *t) { |
|
if (r < 0) |
|
return r; |
|
|
|
- t->stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id); |
|
+ stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id); |
|
} else { |
|
const char *e; |
|
|
|
e = getenv("XDG_DATA_HOME"); |
|
if (e) |
|
- t->stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id); |
|
+ stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id); |
|
else { |
|
|
|
_cleanup_free_ char *h = NULL; |
|
@@ -163,14 +164,14 @@ static int timer_setup_persistent(Timer *t) { |
|
if (r < 0) |
|
return log_unit_error_errno(UNIT(t), r, "Failed to determine home directory: %m"); |
|
|
|
- t->stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id); |
|
+ stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id); |
|
} |
|
} |
|
|
|
- if (!t->stamp_path) |
|
+ if (!stamp_path) |
|
return log_oom(); |
|
|
|
- return 0; |
|
+ return free_and_replace(t->stamp_path, stamp_path); |
|
} |
|
|
|
static uint64_t timer_get_fixed_delay_hash(Timer *t) {
|
|
|