Ninjatrappeur's systemd working tree
Go to file
Michael Chapman 708961c701 core/path: recheck path specs when triggered unit changes state
As documented in systemd.path(5):

    When a service unit triggered by a path unit terminates (regardless
    whether it exited successfully or failed), monitored paths are
    checked immediately again, and the service accordingly restarted
    instantly.

This commit implements this behaviour for PathExists=, PathExistsGlob=,
and DirectoryNotEmpty=. These predicates are essentially
"level-triggered": the service should be activated whenever the
predicate is true. PathChanged= and PathModified=, on the other hand,
are "edge-triggered": the service should only be activated when the
predicate *becomes* true.

The behaviour has been broken since at least as far back as commit
8fca6944c2 ("path: stop watching path specs once we triggered the target
unit"). This commit had systemd stop monitoring inotify whenever the
triggered unit was activated. Unfortunately this meant it never updated
the ->inotify_triggered flag, so it never rechecked the path specs when
the triggered unit deactivated.

With this commit, systemd rechecks all paths specs whenever the
triggered unit deactivates. If any PathExists=, PathExistsGlob= or
DirectoryNotEmpty= predicate passes, the triggered unit is reactivated.

If the target unit is activated by something outside of the path unit,
the path unit immediately transitions to a running state. This ensures
the path unit stops monitoring inotify in this situation.

With this change in place, commit d7cf8c24d4 ("core/path: fix spurious
triggering of PathExists= on restart/reload") is no longer necessary.
The path unit (and its triggered unit) is now always active whenever
the PathExists= predicate passes, so there is no spurious restart when
systemd is reloaded or restarted.
2020-05-05 13:56:02 +10:00
.github cifuzz: upload artifacts only when the "run fuzzers" step fails 2020-05-02 11:20:30 +02:00
.lgtm/cpp-queries lgtm: complain about accept() [people should use accept4() instead, due to O_CLOEXEC] 2019-04-10 20:03:38 +02:00
.mkosi mkosi: Fix openSUSE image declaration 2020-05-04 22:12:58 +02:00
catalog catalog,po: update Polish translation 2020-05-04 17:13:02 +02:00
coccinelle tree-wide: formatting tweaks reported by Coccinelle 2020-04-21 23:21:04 +02:00
docs docs: Change prefix for desktop applications to app- 2020-04-30 14:21:44 +02:00
factory/etc home: add pam_systemd_home.so PAM hookup 2020-01-28 22:36:41 +01:00
hwdb.d Add Kensington SlimBlade Trackball 2020-05-04 18:48:01 +02:00
man man: fix few spelling errors 2020-05-03 10:23:25 +02:00
modprobe.d Add SPDX license headers to various assorted files 2017-11-19 19:08:15 +01:00
network network: add TUN/TAP vt-* network rule for VMs 2020-04-17 19:15:00 +02:00
po catalog,po: update Polish translation 2020-05-04 17:13:02 +02:00
presets preset: let's clean up preset list a bit 2020-04-07 19:01:00 +02:00
rules.d rules.d: import the keyboard builtin instead of running it 2020-03-01 14:04:30 +01:00
semaphoreci semaphore: switch to upstream-ci 2020-04-04 19:36:53 +03:00
shell-completion shell-completion/zsh: update systemd-analyze completions 2020-04-27 08:40:15 +02:00
src core/path: recheck path specs when triggered unit changes state 2020-05-05 13:56:02 +10:00
sysctl.d sysctl: enable coredump for suid binaries 2020-04-07 15:28:46 +02:00
sysusers.d sysusers,tmpfiles: re-create systemd-network, systemd-resolve and systemd-timesync 2018-07-16 17:11:50 +02:00
test core/path: recheck path specs when triggered unit changes state 2020-05-05 13:56:02 +10:00
tmpfiles.d tmpfiles: apply ACLs to top-level journal directory in /run, too 2020-01-31 15:04:12 +01:00
tools tree-wide: fix spelling errors 2020-04-21 23:21:08 +02:00
travis-ci install libzstd-dev for CI builds 2020-05-04 10:59:43 +02:00
units binfmt: also unregister binfmt entries from unit 2020-04-23 17:14:45 +02:00
xorg scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
.clang-format Improve help for clang-format 2020-04-25 09:39:31 +02:00
.ctags editors: Prevent ctags from following symlinks 2019-02-15 11:01:20 -08:00
.dir-locals.el scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
.editorconfig scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
.gitattributes git: indicate that tabs are never OK in the systemd tree 2013-10-30 02:25:38 +01:00
.gitignore gitignore: add nspawn image lock and mkosi temporary files 2018-09-07 20:00:22 +02:00
.lgtm.yml lgtm: drop the TMPDIR/meson workaround 2020-03-03 20:27:42 +01:00
.mailmap NEWS: update contributors list 2020-03-03 08:31:06 +01:00
.travis.yml travis: add missing closing quote sign 2019-11-24 13:15:20 +03:00
.vimrc scripts: use 4 space indentation 2019-04-12 08:30:31 +02:00
.ycm_extra_conf.py ycm: add doc string for all the functions in configuration file 2017-11-29 13:21:49 -07:00
LICENSE.GPL2 relicense to LGPLv2.1 (with exceptions) 2012-04-12 00:24:39 +02:00
LICENSE.LGPL2.1 licence: remove references to old FSF address 2012-12-17 11:41:31 +01:00
Makefile build-sys: Fix Makefile wrapper for install target (#6548) 2017-08-07 11:29:20 +02:00
NEWS core: introduce support for cgroup freezer 2020-04-30 19:02:51 +02:00
README coredump: add zstandard support for coredumps 2020-05-04 10:59:43 +02:00
README.md oss-fuzz: point the badge directly to our logs 2020-04-04 19:41:33 +02:00
TODO update TODO 2020-04-28 23:16:35 +02:00
azure-pipelines.yml Free up some resources on Azure Pipelines 2019-07-17 13:28:38 +09:00
configure treewide: more portable bash shebangs 2020-03-05 17:27:07 +01:00
meson.build coredump: add zstandard support for coredumps 2020-05-04 10:59:43 +02:00
meson_options.txt coredump: add zstandard support for coredumps 2020-05-04 10:59:43 +02:00
mkosi.build mkosi: Unify environment for unit tests 2020-04-22 10:35:12 +02:00
mkosi.default mkosi: create .mkosi directory 2016-10-06 11:53:58 -04:00
zanata.xml po: add basic fedora.zanata.org configuration 2018-02-19 13:56:57 +01:00

README.md

Systemd

System and Service Manager

Count of open issues over time Count of open pull requests over time Semaphore CI Build Status
Coverity Scan Status
Fuzzit Status
OSS-Fuzz Status
CII Best Practices
Travis CI Build Status
Language Grade: C/C++
CentOS CI Build Status
Build Status
Packaging status

Details

General information about systemd can be found in the systemd Wiki.

Information about build requirements is provided in the README file.

Consult our NEWS file for information about what's new in the most recent systemd versions.

Please see the Hacking guide for information on how to hack on systemd and test your modifications.

Please see our Contribution Guidelines for more information about filing GitHub Issues and posting GitHub Pull Requests.

When preparing patches for systemd, please follow our Coding Style Guidelines.

If you are looking for support, please contact our mailing list or join our IRC channel.

Stable branches with backported patches are available in the stable repo.