summaryrefslogtreecommitdiff
path: root/lib/log.c
diff options
context:
space:
mode:
authorDaniel Walton <dwalton@cumulusnetworks.com>2016-06-08 17:49:09 -0700
committerDaniel Walton <dwalton@cumulusnetworks.com>2016-06-08 17:49:09 -0700
commitb7b71de5fe090dbc85616a424d5613e75ba8c8b7 (patch)
treed030e983dea860e8ea80bb72f10908af11ca0d9d /lib/log.c
parent5d1a88075a408acec53cb9b027e9955150581a0e (diff)
parent4f87aceb78dcec9a88860d92c3657fcbeb46e845 (diff)
Merge branch 'cmaster-next' of ssh://stash.cumulusnetworks.com:7999/quag/quagga into cmaster-next
Diffstat (limited to 'lib/log.c')
-rw-r--r--lib/log.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/lib/log.c b/lib/log.c
index 92a1a4ddd4..453a611dcd 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -459,6 +459,40 @@ zlog_signal(int signo, const char *action
NULL
#endif
);
+
+ s = buf;
+ if (!thread_current)
+ s = str_append (LOC, "no thread information available\n");
+ else
+ {
+ s = str_append (LOC, "in thread ");
+ s = str_append (LOC, thread_current->funcname);
+ s = str_append (LOC, " scheduled from ");
+ s = str_append (LOC, thread_current->schedfrom);
+ s = str_append (LOC, ":");
+ s = num_append (LOC, thread_current->schedfrom_line);
+ s = str_append (LOC, "\n");
+ }
+
+#define DUMP(FD) write_wrapper(FD, buf, s-buf);
+ /* If no file logging configured, try to write to fallback log file. */
+ if (logfile_fd >= 0)
+ DUMP(logfile_fd)
+ if (!zlog_default)
+ DUMP(STDERR_FILENO)
+ else
+ {
+ if (PRI <= zlog_default->maxlvl[ZLOG_DEST_STDOUT])
+ DUMP(STDOUT_FILENO)
+ /* Remove trailing '\n' for monitor and syslog */
+ *--s = '\0';
+ if (PRI <= zlog_default->maxlvl[ZLOG_DEST_MONITOR])
+ vty_log_fixed(buf,s-buf);
+ if (PRI <= zlog_default->maxlvl[ZLOG_DEST_SYSLOG])
+ syslog_sigsafe(PRI|zlog_default->facility,msgstart,s-msgstart);
+ }
+#undef DUMP
+
#undef PRI
#undef LOC
}
@@ -616,6 +650,16 @@ ZLOG_FUNC(zlog_debug, LOG_DEBUG)
#undef ZLOG_FUNC
+void zlog_thread_info (int log_level)
+{
+ if (thread_current)
+ zlog(NULL, log_level, "Current thread function %s, scheduled from "
+ "file %s, line %u", thread_current->funcname,
+ thread_current->schedfrom, thread_current->schedfrom_line);
+ else
+ zlog(NULL, log_level, "Current thread not known/applicable");
+}
+
void
_zlog_assert_failed (const char *assertion, const char *file,
unsigned int line, const char *function)
@@ -628,6 +672,7 @@ _zlog_assert_failed (const char *assertion, const char *file,
zlog(NULL, LOG_CRIT, "Assertion `%s' failed in file %s, line %u, function %s",
assertion,file,line,(function ? function : "?"));
zlog_backtrace(LOG_CRIT);
+ zlog_thread_info(LOG_CRIT);
abort();
}