Module Name: src Committed By: christos Date: Mon Jul 9 03:11:59 UTC 2012
Modified Files: src/lib/libexecinfo: backtrace.c Log Message: fix cleanup on error To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/lib/libexecinfo/backtrace.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libexecinfo/backtrace.c diff -u src/lib/libexecinfo/backtrace.c:1.1 src/lib/libexecinfo/backtrace.c:1.2 --- src/lib/libexecinfo/backtrace.c:1.1 Sat May 26 18:02:29 2012 +++ src/lib/libexecinfo/backtrace.c Sun Jul 8 23:11:59 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: backtrace.c,v 1.1 2012/05/26 22:02:29 christos Exp $ */ +/* $NetBSD: backtrace.c,v 1.2 2012/07/09 03:11:59 christos Exp $ */ /*- * Copyright (c) 2012 The NetBSD Foundation, Inc. @@ -29,7 +29,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__RCSID("$NetBSD: backtrace.c,v 1.1 2012/05/26 22:02:29 christos Exp $"); +__RCSID("$NetBSD: backtrace.c,v 1.2 2012/07/09 03:11:59 christos Exp $"); #include <sys/param.h> #include <assert.h> @@ -168,7 +168,7 @@ backtrace_symbols_fmt(void *const *trace st = NULL; if ((ptr = calloc(len, slen)) == NULL) - return NULL; + goto out; size_t psize = len * slen; size_t offs = len * sizeof(char *); @@ -180,7 +180,8 @@ backtrace_symbols_fmt(void *const *trace x = format_address(st, &ptr, &psize, offs, fmt, trace[i]); if (x == -1) { free(ptr); - return NULL; + ptr = NULL; + goto out; } offs += x; ptr[offs++] = '\0'; @@ -191,6 +192,7 @@ backtrace_symbols_fmt(void *const *trace for (size_t j = 0; j < len; j++) ((char **)(void *)ptr)[j] += (intptr_t)ptr; +out: symtab_destroy(st); if (fd != -1) (void)close(fd);