Blame SOURCES/0751-core-rerun-GC-logic-for-a-unit-that-loses-a-referenc.patch
|
Pablo Greco |
48fc63 |
From 2175fc04df0f8e272cbff7540acd38eced9c63d7 Mon Sep 17 00:00:00 2001
|
|
Pablo Greco |
48fc63 |
From: Lennart Poettering <lennart@poettering.net>
|
|
Pablo Greco |
48fc63 |
Date: Fri, 29 Apr 2016 11:18:53 +0200
|
|
Pablo Greco |
48fc63 |
Subject: [PATCH] core: rerun GC logic for a unit that loses a reference
|
|
Pablo Greco |
48fc63 |
|
|
Pablo Greco |
48fc63 |
Let's make sure when we drop a reference to a unit, that we run the GC queue on
|
|
Pablo Greco |
48fc63 |
it again.
|
|
Pablo Greco |
48fc63 |
|
|
Pablo Greco |
48fc63 |
This (together with the previous commit) should deal with the GC issues pointed
|
|
Pablo Greco |
48fc63 |
out in:
|
|
Pablo Greco |
48fc63 |
|
|
Pablo Greco |
48fc63 |
https://github.com/systemd/systemd/pull/2993#issuecomment-215331189
|
|
Pablo Greco |
48fc63 |
|
|
Pablo Greco |
48fc63 |
(cherry picked from commit b75102e5bf4cf249052d42be955d403e3e03b47c)
|
|
Pablo Greco |
48fc63 |
(cherry picked from commit 0ace07115f14a57c81afbc9a7e947778a743870e)
|
|
Pablo Greco |
48fc63 |
|
|
Pablo Greco |
48fc63 |
Related: #1729228
|
|
Pablo Greco |
48fc63 |
---
|
|
Pablo Greco |
48fc63 |
src/core/unit.c | 4 ++++
|
|
Pablo Greco |
48fc63 |
1 file changed, 4 insertions(+)
|
|
Pablo Greco |
48fc63 |
|
|
Pablo Greco |
48fc63 |
diff --git a/src/core/unit.c b/src/core/unit.c
|
|
Pablo Greco |
48fc63 |
index 1dff541ac3..b004aa8fcd 100644
|
|
Pablo Greco |
48fc63 |
--- a/src/core/unit.c
|
|
Pablo Greco |
48fc63 |
+++ b/src/core/unit.c
|
|
Pablo Greco |
48fc63 |
@@ -3145,6 +3145,10 @@ void unit_ref_unset(UnitRef *ref) {
|
|
Pablo Greco |
48fc63 |
if (!ref->unit)
|
|
Pablo Greco |
48fc63 |
return;
|
|
Pablo Greco |
48fc63 |
|
|
Pablo Greco |
48fc63 |
+ /* We are about to drop a reference to the unit, make sure the garbage collection has a look at it as it might
|
|
Pablo Greco |
48fc63 |
+ * be unreferenced now. */
|
|
Pablo Greco |
48fc63 |
+ unit_add_to_gc_queue(ref->unit);
|
|
Pablo Greco |
48fc63 |
+
|
|
Pablo Greco |
48fc63 |
LIST_REMOVE(refs, ref->unit->refs, ref);
|
|
Pablo Greco |
48fc63 |
ref->unit = NULL;
|
|
Pablo Greco |
48fc63 |
}
|