[collectd] collectd leaks SIGCHLD == SIG_IGN into plugins

Ruben Kerkhof ruben at rubenkerkhof.com
Tue Nov 13 09:19:40 CET 2018


Hi Rich,

On Fri, Nov 9, 2018 at 1:19 PM, Richard W.M. Jones <rjones at redhat.com> wrote:
> Peter Dimitrov and myself were debugging a very peculiar bug when
> libguestfs is run as a plugin from collectd:
>
>   https://www.redhat.com/archives/libguestfs/2018-November/thread.html#00023
>
> The long story short is that collectd leaks SIGCHLD == SIG_IGN setting
> into plugins:
>
>   https://www.redhat.com/archives/libguestfs/2018-November/msg00095.html
>
> This means that any plugin that does the usual pattern of:
>
>   pid = fork ();
>   ...
>   if (waitpid (pid, NULL, 0) == -1) {
>     perror ("waitpid");
>     exit (EXIT_FAILURE);
>   }
>
> will fail, because the forked subprocess is automatically reaped
> before waitpid is called, resulting in the wait failing with errno ==
> ECHILD.
>
> It is possible to work around this by adding:
>
>   signal (SIGCHLD, SIG_DFL);
>
> to the plugin.  However I believe this is a bug in collectd, and it
> should sanitize signals (and maybe other things) before running
> plugins.
>
> Rich.

Would you mind opening an issue at
https://github.com/collectd/collectd/issues/new for this?

Kind regards,

Ruben Kerkhof



More information about the collectd mailing list