d5eced core: rework StopWhenUnneeded= logic

4 files Authored by Lennart Poettering 4 years ago, Committed by Packit Service 4 years ago,
    core: rework StopWhenUnneeded= logic
    
    Previously, we'd act immediately on StopWhenUnneeded= when a unit state
    changes. With this rework we'll maintain a queue instead: whenever
    there's the chance that StopWhenUneeded= might have an effect we enqueue
    the unit, and process it later when we have nothing better to do.
    
    This should make the implementation a bit more reliable, as the unit notify event
    cannot immediately enqueue tons of side-effect jobs that might
    contradict each other, but we do so only in a strictly ordered fashion,
    from the main event loop.
    
    This slightly changes the check when to consider a unit "unneeded".
    Previously, we'd assume that a unit in "deactivating" state could also
    be cleaned up. With this new logic we'll only consider units unneeded
    that are fully up and have no job queued. This means that whenever
    there's something pending for a unit we won't clean it up.
    
    (cherry picked from commit a3c1168ac293f16d9343d248795bb4c246aaff4a)
    
    Resolves: #1798046
    
    patch_name: 0346-core-rework-StopWhenUnneeded-logic.patch
    present_in_specfile: true
    location_in_specfile: 346
    squash_commits: true
    
        
file modified
+43 -0
file modified
+3 -0
file modified
+67 -55
file modified
+7 -0