[systemd-commits] src/core

Lennart Poettering lennart at kemper.freedesktop.org
Fri Mar 1 06:11:50 PST 2013


 src/core/unit.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

New commits:
commit bf6dcfa6a79a459239799a21bdcba115d696a006
Author: Oleksii Shevchuk <alxchk at gmail.com>
Date:   Thu Feb 14 00:49:26 2013 +0200

    unit: fix the race in deserialization.
    
    unit_notify is fired in deserelization code (particulary in
    service_set_state). Units passed in random order, and there is possibility,
    that unit with StopWhenUnneeded=yes passed before it actual dependecies. In
    that case unit will be stopped as unneeded, because deps in UNIT_INACTIVE state
    yet.
    
    So, reuse similar logic (unit.c:1421) to avoid this race

diff --git a/src/core/unit.c b/src/core/unit.c
index e2c06ae..601be60 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -1517,7 +1517,8 @@ void unit_notify(Unit *u, UnitActiveState os, UnitActiveState ns, bool reload_su
 
         /* Maybe we finished startup and are now ready for being
          * stopped because unneeded? */
-        unit_check_unneeded(u);
+        if (u->manager->n_reloading <= 0)
+                unit_check_unneeded(u);
 
         unit_add_to_dbus_queue(u);
         unit_add_to_gc_queue(u);



More information about the systemd-commits mailing list