fork() after pthread_mutex_init()

Edgar Fuß ef at
Fri May 3 16:04:42 CEST 2013

What's the rationale behind calling read_mainconfig() before daemonizing?
There's a comment
	/*  Read the configuration files, BEFORE doing anything else.  */
suggesting this is intentional.

However, during that, mutexes are created via pthread_mutex_init().
To my understanding, fork()ing while holding mutexes (and without intervening
via a pthread_atfork() handler) calls for undefined behaviour.

Indeed, on NetBSD, I get
	radiusd: Error detected by libpthread: Invalid mutex.
	Detected by file [...], line [...], function "pthread_mutex_lock_slow".
	See pthread(3) for information.
unless I use one of the dont_fork options.

	radiusd -f &
works as a workaround.

Also, moving the configuration reading block after the daemonizing block
seems to work, but I'm afraid there was a good reason for reading the
configuration before doing the fork.

More information about the Freeradius-Devel mailing list