exec: fix potential deadlock after fork()
authorDaniel Vrátil <daniel.vratil@avast.com>
Wed, 12 Sep 2018 15:05:31 +0000 (17:05 +0200)
committerFlorian Forster <octo@collectd.org>
Tue, 9 Oct 2018 12:42:21 +0000 (14:42 +0200)
commit0684aea7453186e6f90ce4b6b8c5bcca68f0d1b9
tree20f525e6b867c8d4a47a7b134cda08f19900c3ac
parent33b2b04f702b3c30661521ddfe2d0f000c0fa5d9
exec: fix potential deadlock after fork()

POSIX forbids calling functions which are not thread-safe like
setenv() after fork() in multi-threaded programs. It happens to
work just fine with some libc implementations, but it causes a
deadlock in the child process with uClibc for example.

The proper way to pass new environment variables to the child
process is to update parent's environment before the fork(), so
that the child inherits the updated environment and then undo the
changes in the parent process again.

Signed-off-by: Florian Forster <octo@collectd.org>
src/exec.c