X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fstacktrace.c;h=9f335e44258dffe481751c37de03a3fb05a2a61d;hb=52e57c880aba9c5e89f59d962eb9af75670b76e0;hp=38aae9545c22c0ee88f259f0a4e8b0ccdb6757b2;hpb=382d15d447b7a95390decfa783836ae4fe255b3d;p=silc.git diff --git a/lib/silcutil/stacktrace.c b/lib/silcutil/stacktrace.c index 38aae954..9f335e44 100644 --- a/lib/silcutil/stacktrace.c +++ b/lib/silcutil/stacktrace.c @@ -1,10 +1,10 @@ /* - stacktrace.c + stacktrace.c Author: Pekka Riikonen - Copyright (C) 2002 Pekka Riikonen + Copyright (C) 2002, 2007 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 @@ -17,16 +17,20 @@ */ -#include "silcincludes.h" +#include "silc.h" #ifdef SILC_STACKTRACE static void *st_blocks = NULL; static unsigned long st_blocks_count = 0; -static bool dump = FALSE; -static bool malloc_check = FALSE; +static SilcBool dump = FALSE; +static SilcBool malloc_check = FALSE; -#define SILC_ST_DEPTH 10 +#ifdef SILC_DEBUG +#define SILC_ST_DEPTH 15 +#else +#define SILC_ST_DEPTH 8 +#endif /* SILC_DEBUG */ /* Memory block with stack trace */ typedef struct SilcStBlockStruct { @@ -148,6 +152,8 @@ void silc_st_free(void *ptr, const char *file, int line) st_blocks = stack->next; st_blocks_count--; + + memset(stack, 'F', SILC_ST_GET_SIZE(stack->size)); free(stack); } @@ -191,7 +197,7 @@ void silc_st_dump(void) for (s = stack; s; s = s->next) { if (s->file == stack->file && s->line == stack->line && s->depth == stack->depth && - !memcmp(s->stack, stack->stack, + !memcmp(s->stack, stack->stack, (s->depth * sizeof(stack->stack[0])))) { blocks++; bytes += s->size; @@ -203,14 +209,14 @@ void silc_st_dump(void) fprintf(fp, "%s:%d: #blocks=%lu, bytes=%lu\n", stack->file, stack->line, blocks, bytes); for (i = 0; i < stack->depth; i++) - fprintf(fp, "%p\n", stack->stack[i]); + fprintf(fp, "\tpc=%p\n", stack->stack[i]); } } if (!leaks) { fprintf(stderr, "\nNo memory leaks\n"); } else { - fprintf(stderr, + fprintf(stderr, "-----------------------------------------\n" "-----------------------------------------\n" " Memory leaks dumped to 'stacktrace.log'\n"