The service did die with exit code 0, but s6-permafail is wrong, since
exit code 0 is not specified in the filter.
Looking at the source code in s6-permafailon.c, it seems to me that
the codes[32] bitarray is not initialized with zeroes before calling
bitarray_set(n).
You're probably right that it is the issue! (codes was a static
variable in the first iteration; static variables do not need to be
0-initialized. But then I reworked the code, made codes an automatic
variable, and failed to initialize it to zero. And that is why relying
on magic features is a bad thing, and I should stop doing this out of
laziness.)
I fixed it in the latest git of s6; if you prefer numbered releases,
I'm working on a bigger release (with some interface changes and a
major version bump) that should happen before the end of the year, but
not right now ^^'
Please try the fixed version. If you don't want to use the git head,
you can apply the very simple diff:
https://git.skarnet.org/cgi-bin/cgit.cgi/s6/diff/src/supervision/s6-permafailon.c
If that version doesn't solve your problem, then I'll investigate
further.
Thanks for the report!
--
Laurent