From 3749c6ee56f1df40934bab1aae6baeb334206b69 Mon Sep 17 00:00:00 2001 From: Pekka Riikonen Date: Tue, 2 Jun 2009 08:01:25 +0300 Subject: [PATCH] silcd: Save debug message in ring buffer In debug version save 3000 last debug messages in ring buffer so that they are available in core files. --- apps/silcd/command.c | 4 ++-- apps/silcd/silcd.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/apps/silcd/command.c b/apps/silcd/command.c index 9c1fc4e2..597f042e 100644 --- a/apps/silcd/command.c +++ b/apps/silcd/command.c @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2008 Pekka Riikonen + Copyright (C) 1997 - 2009 Pekka Riikonen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -339,7 +339,7 @@ SILC_TASK_CALLBACK(silc_server_command_pending_timeout) SilcBuffer tmpreply; int i; - SILC_LOG_DEBUG(("Timeout pending command")); + SILC_LOG_DEBUG(("Timeout pending command %p", reply)); /* Allocate temporary and bogus command reply context */ cmdr = silc_calloc(1, sizeof(*cmdr)); diff --git a/apps/silcd/silcd.c b/apps/silcd/silcd.c index cc4d7ff3..d02d5129 100644 --- a/apps/silcd/silcd.c +++ b/apps/silcd/silcd.c @@ -557,6 +557,28 @@ void silc_server_stderr(SilcLogType type, char *message) } } +#ifdef SILC_DEBUG +#define NUM_DEBUGS 3000 +static char debugs[NUM_DEBUGS][128]; +static int cur_debug = 0; + +SilcBool silc_server_debug_callback(char *file, char *function, int line, + char *message, void *context) +{ + SilcTimeStruct curtime; + + /* Save the message to ring buffer */ + silc_time_value(0, &curtime); + silc_snprintf(debugs[cur_debug % NUM_DEBUGS], sizeof(debugs[0]), + "%02d:%02d:%02d %s:%d: %s", curtime.hour, + curtime.minute, curtime.second, function, line, + message); + cur_debug++; + + return FALSE; +} +#endif /* SILC_DEBUG */ + int main(int argc, char **argv) { int ret, opt, option_index; @@ -565,6 +587,10 @@ int main(int argc, char **argv) char *silcd_config_file = NULL; struct sigaction sa; +#ifdef SILC_DEBUG + silc_log_set_debug_callbacks(silc_server_debug_callback, NULL, NULL, NULL); +#endif /* SILC_DEBUG */ + /* Parse command line arguments */ if (argc > 1) { #ifdef HAVE_GETOPT_LONG -- 2.24.0