Hello,

Something went wrong with s6-log after a reboot today. :)

    s6-log: fatal: invalid notification fd: Bad file descriptor

The loggers in my supervision trees are all s6-log -d 6 ...
with a matching number in notification-fd.  (Six is a nice number, yes?)

s6 was installed from packages on a machine running FreeBSD.
I follow the quarterly branch of the FreeBSD ports tree.
About one month ago, that ports tree went from:

    skalibs   2.13.1.1
    execline  2.9.3.0
    s6        2.11.3.2

to:

    skalibs   2.14.1.1
    execline  2.9.5.1
    s6        2.12.0.4

This was my first reboot after that bump.
As a quick bodge, I rolled back and rebooted again.
Then I tried to work out what had caused the upset...

The problem reproduces with -d 6 but not -d 42.  High fds are fine.

    970bbeb  Defork s6-supervise (!)

This commit drew my attention.  Previously, the call to selfpipe_finish()
was sequenced before the call to fd_move(notif, notifyp[1]).
I built everything from their respective trunk tips and traced:
sure enough, the read-side of the selfpipe happened to be at fd 6.
cspawn_child_exec() now executes selfpipe_finish() very late,
after it calls fd_move() on the notification-fd.
The selfpipe fd gets blatted by the noti-fd,
then the noti-fd is closed by accident.

Is this a bug, or am I holding it wrong?

I also use -d 6 on macOS but am yet to encounter the problem there.
(I swept a bunch of fds to no avail.  Does not repro on macOS.)

configure on FreeBSD:

    Checking whether system has POSIX_SPAWN_SETSID...
      ... no
    Checking whether system has POSIX_SPAWN_SETSID_NP...
      ... no

configure on macOS:

    Checking whether system has POSIX_SPAWN_SETSID...
      ... yes
    Checking whether system has POSIX_SPAWN_SETSID_NP...
      ... no

So maybe skalibs' cspawn...
...calls cspawn_fork() on FreeBSD if CSPAWN_FLAGS_SETSID is set.
...calls cspawn_pspawn() on macOS under the same conditions.

There is no call to selfpipe_finish() in cspawn_pspawn.
(I guess because of posix_spawnattr_setsigmask?)

Thank you for reading -- and for s6.

Reply via email to