[systemd-devel] systemd-notify

Lennart Poettering lennart at poettering.net
Thu Apr 18 13:35:39 UTC 2019


On Do, 18.04.19 14:21, Josef Moellers (jmoellers at suse.de) wrote:

> Hi,
>
> We're currently working on a bug which afaict is due to a race condition:
>
> 1) systemd starts xenstored.service
> 2) /etc/xen/scripts/launch-xenstore does its work (starts
> /usr/lib/xen/bin/init-xenstore-domain)
> 3) /etc/xen/scripts/launch-xenstore runs "systemd-notify --ready"
> 4) "systemd-notify --ready" sends a UDP-message to systemd
> 5) /etc/xen/scripts/launch-xenstore exits
> 6) systemd gets SIGCHLD and removes the PID from watch_pids[12]
> 7) systemd receives the UDP message, but
>    a) the process is gone
>    b) the PID is not in watch_pids[12] any more.
> 8) "Cannot find unit for notify message of PID..."
> 9) No start of depending units.
>
> I see no proper way to get out of this but to make the systemd-notify
> synchronous rather than fire-and-forget and expect it to wait for a
> response from systemd.

Hmm, the sd_notify() message handling actually runs at a higher
priority than the SIGCHLD handling, so that when both happen at the
same time we should always process the sd_notify message first, and
the SIGCHLD message second, precisey to avoid this problem.

Which systemd version is this? Is this reproducible in current
upstream versions?

Lennart

--
Lennart Poettering, Berlin


More information about the systemd-devel mailing list