The Perl ForkingServer sets SIGCHLD to be ignores so that the forks can be automatically reaped, since the ForkingServer doesn't care about the child exit code.
The fix for
THRIFT-3848 was incomplete. It needs to reset the signal handler in the child to use a default SIGCHLD handler so any thrift handler implementation relying on SIGCHLD will execute properly.
Also due to the fact that SIGCHLD is ignored in ForkingServer, the _collectChildren and call to waitpid() are unnecessary and can be removed, along with the children hash, from _parent().