nagios and freebsd threads issue : help please ...

M. Warner Losh imp at bsdimp.com
Mon Aug 22 07:21:00 GMT 2005


In message: <43088841.4090709 at nbux.com>
            Christophe Yayon <lists at nbux.com> writes:
: http://www.opengroup.org/onlinepubs/009695399/functions/pthread_atfork.html
: 
:   "It is suggested that programs that use fork() call an exec function
:   very soon afterwards in the child process, thus resetting all states. In
:   the meantime, only a short list of async-signal-safe library routines
:   are promised to be available."
: 
:   Note *suggested*. This is a recommendation to protect against a shoddy
:   pthread-implementation. The thread specifications rule that only the
:   thread calling fork() is duplicated, which initially leads to the
:   recommendation (other threads holding locks aren't around to release
:   them in the new execution context).

Here's what nagios does after a fork:

       in base/util.c:

	(1) Become the process group leader by calling setpgid(0, 0);
	(2) something called set_all_macro_environemt_vars(TRUE).
	    This calls snprintf a bunch, as well as set variables
	    by saving them to malloced memory.  This save is done
	    with strcpy and strcat.  setenv is then called to try to
	    export them.  memory is then freed with free(3).
	(3) All signal handlers are reset
	(4) The right part of the pipe is closed
	(5) sigalarm handler is created and an alarm set.
	(6) Checks to see if it executing an embedded perl script,
            then tries to execute it if so.  This has the feel of
            being too much after the fork.
	(7) Calls popen on the command if not.
	(8) Reads the output of the command using fgets.
	(9) closes the other end of the pipe
	(10) unsets all env vars.
	(11) Calls _exit()


	in base/checks.c

	(1) set_all_macro_environment_vars(TRUE)
	(2) forks again
	(3) granchild:
		resets handler, setpgid, etc.
		if perl script, do embedded perl, otherwise popen.
		lots of read/write to pipe.

	likewise in base/commands.c fork is also called for similar
	things.

	There's other places that also call popen.

So, if any of these things is an issue, and you can point to a posix
things that says it is an issue, then I think that the problem can be
resolved.

Looks complicated to actually setup, but in my experience, popen +
threads is asking for trouble.

Warner


More information about the freebsd-hackers mailing list