summaryrefslogtreecommitdiff
path: root/lib/libfrr.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libfrr.c')
-rw-r--r--lib/libfrr.c58
1 files changed, 22 insertions, 36 deletions
diff --git a/lib/libfrr.c b/lib/libfrr.c
index a1982841d3..d1a9f0b1cb 100644
--- a/lib/libfrr.c
+++ b/lib/libfrr.c
@@ -820,7 +820,8 @@ struct event_loop *frr_init(void)
log_ref_vty_init();
lib_error_init();
- nb_init(master, di->yang_modules, di->n_yang_modules, true);
+ nb_init(master, di->yang_modules, di->n_yang_modules, true,
+ (di->flags & FRR_LOAD_YANG_LIBRARY) != 0);
if (nb_db_init() != NB_OK)
flog_warn(EC_LIB_NB_DATABASE,
"%s: failed to initialize northbound database",
@@ -1125,12 +1126,9 @@ static void frr_terminal_close(int isexit)
* don't redirect when stdout is set with --log stdout
*/
for (fd = 2; fd >= 0; fd--)
- if (logging_to_stdout && isatty(fd) &&
- fd == STDOUT_FILENO) {
- /* Do nothing. */
- } else {
+ if (isatty(fd) &&
+ (fd != STDOUT_FILENO || !logging_to_stdout))
dup2(nullfd, fd);
- }
close(nullfd);
}
}
@@ -1216,12 +1214,9 @@ void frr_run(struct event_loop *master)
* stdout
*/
for (fd = 2; fd >= 0; fd--)
- if (logging_to_stdout && isatty(fd) &&
- fd == STDOUT_FILENO) {
- /* Do nothing. */
- } else {
+ if (isatty(fd) &&
+ (fd != STDOUT_FILENO || !logging_to_stdout))
dup2(nullfd, fd);
- }
close(nullfd);
}
@@ -1244,10 +1239,6 @@ void frr_early_fini(void)
void frr_fini(void)
{
- FILE *fp;
- char filename[128];
- int have_leftovers = 0;
-
hook_call(frr_fini);
vty_terminate();
@@ -1268,32 +1259,27 @@ void frr_fini(void)
event_master_free(master);
master = NULL;
zlog_tls_buffer_fini();
- zlog_fini();
+
+ if (0) {
+ /* this is intentionally disabled. zlog remains running until
+ * exit(), so even the very last item done during shutdown can
+ * have its zlog() messages written out.
+ *
+ * Yes this causes memory leaks. They are explicitly marked
+ * with DEFINE_MGROUP_ACTIVEATEXIT, which is only used for
+ * log target memory allocations, and excluded from leak
+ * reporting at shutdown. This is strongly preferable over
+ * just discarding error messages at shutdown.
+ */
+ zlog_fini();
+ }
+
/* frrmod_init -> nothing needed / hooks */
rcu_shutdown();
frrmod_terminate();
- /* also log memstats to stderr when stderr goes to a file*/
- if (debug_memstats_at_exit || !isatty(STDERR_FILENO))
- have_leftovers = log_memstats(stderr, di->name);
-
- /* in case we decide at runtime that we want exit-memstats for
- * a daemon
- * (only do this if we actually have something to print though)
- */
- if (!debug_memstats_at_exit || !have_leftovers)
- return;
-
- snprintf(filename, sizeof(filename), "/tmp/frr-memstats-%s-%llu-%llu",
- di->name, (unsigned long long)getpid(),
- (unsigned long long)time(NULL));
-
- fp = fopen(filename, "w");
- if (fp) {
- log_memstats(fp, di->name);
- fclose(fp);
- }
+ log_memstats(di->name, debug_memstats_at_exit);
}
struct json_object *frr_daemon_state_load(void)