X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fstacktrace.c;h=9f335e44258dffe481751c37de03a3fb05a2a61d;hb=52e57c880aba9c5e89f59d962eb9af75670b76e0;hp=1a93192647fb7623deba80a6d136677701cbc05a;hpb=40f8443d8d3a6577336ee66d18e04d9ac4d956bb;p=silc.git diff --git a/lib/silcutil/stacktrace.c b/lib/silcutil/stacktrace.c index 1a931926..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 @@ -26,7 +26,11 @@ static unsigned long st_blocks_count = 0; 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"