We are experiencing an unbreakable loop in manager_dispatch_gc_queue.
Problem happens when systemd runs in sysV compatibility mode (Porky
enables this).

Seems like manager_dispatch_gc_queue's while loop gets stuck and seems
like unit_gc_sweep cannot make a decision about the unit. As a result,
it marks the unit with offset_unsure and adds the unit back to gc

If I am reading the code correctly recursive unit_gc_sweep will never
be able to remove the unit from the gc queue if it is referenced by
another unit and if another unit is referenced by the unit.

A is referenced by B
B is referenced by A

We have this circular referenced by dependency between units and I am
quite sure they are due to sysV compatibility.

I know that systemd does not allow circular dependency between units
(ex, wants, or after) but do we allow circular referenced by
dependency? If so, then it is expected that manager_dispatch_gc_queue
gets stuck.

We can reproduce it on 216/217 when we isolate a target.

Note: Line 
should be before
since unit_gc_sweep() sets the u->in_gc_queue = true if it cannot make
a decision and we set it back to false.

systemd-devel mailing list

Reply via email to