Skip to content
Nigel Metheringham edited this page Nov 30, 2012 · 3 revisions

Q0089

Question

What does the error kernel: application bug: exim(12099) has SIGCHLD set to SIG_IGN but calls wait() mean?

Answer

This was a bad interaction between a change to the Linux kernel and some belt and braces programming in Exim. The following explanation is taken from Exim's change log: When Exim is receiving multiple messages on a single connection, and spinning off delivery processess, it sets the SIGCHLD signal handling to SIG_IGN, because it doesn't want to wait for these processes. However, because on some OS this didn't work, it also has a paranoid call to waitpid() in the loop to reap any children that have finished. Some versions of Linux now complain (to the system log) about this illogical > call to waitpid(). I have therefore put it inside a conditional

compilation, and arranged for it to be omitted for Linux. I am pretty sure I caught all the places in Exim where this happened. However, there are still occasional reports of this error. I have not heard of any resolutions, but my current belief is that they are caused by something that Exim calls falling foul of the same check. There was at one time a suspicion that the IPv6 stack was involved.


Clone this wiki locally