#include "memory.h"
#include "linklist.h"
#include "zlog.h"
+#include "libfrr.h"
#include "libfrr_trace.h"
DEFINE_MTYPE_STATIC(LIB, FRR_PTHREAD, "FRR POSIX Thread");
int ret;
sigset_t oldsigs, blocksigs;
+ assert(frr_is_after_fork || !"trying to start thread before fork()");
+
/* Ensure we never handle signals on a background thread by blocking
* everything here (new thread inherits signal mask)
*/
#endif
static char vtypath_default[512];
+/* cleared in frr_preinit(), then re-set after daemonizing */
+bool frr_is_after_fork = true;
bool debug_memstats_at_exit = false;
static bool nodetach_term, nodetach_daemon;
static uint64_t startup_fds;
void frr_preinit(struct frr_daemon_info *daemon, int argc, char **argv)
{
di = daemon;
+ frr_is_after_fork = false;
/* basename(), opencoded. */
char *p = strrchr(argv[0], '/');
if (di->daemon_mode || di->terminal)
frr_daemonize();
+ frr_is_after_fork = true;
+
if (!di->pid_file)
di->pid_file = pidfile_default;
pid_output(di->pid_file);
extern char frr_protoname[];
extern char frr_protonameinst[];
+/* always set in the spot where we *would* fork even if we don't do so */
+extern bool frr_is_after_fork;
extern bool debug_memstats_at_exit;