From 1a6c26b20eb25f3dbccb8296906f33e4f2626fdd Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Tue, 25 Oct 2011 22:05:46 +0000 Subject: [PATCH] Check fopen return value for ao2 reference debug output. Reported by: wdoekes Patched by: wdoekes Review: https://reviewboard.asterisk.org/r/1539/ ........ Merged revisions 342487 from http://svn.asterisk.org/svn/asterisk/branches/1.8 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/10@342488 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- main/astobj2.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/main/astobj2.c b/main/astobj2.c index 5e61d5e5f1..8066c9e59e 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -210,14 +210,19 @@ int __ao2_ref_debug(void *user_data, const int delta, char *tag, char *file, int return -1; if (delta != 0) { - FILE *refo = fopen(REF_FILE,"a"); - fprintf(refo, "%p %s%d %s:%d:%s (%s) [@%d]\n", user_data, (delta<0? "":"+"), delta, file, line, funcname, tag, obj ? obj->priv_data.ref_counter : -1); - fclose(refo); + FILE *refo = fopen(REF_FILE, "a"); + if (refo) { + fprintf(refo, "%p %s%d %s:%d:%s (%s) [@%d]\n", user_data, (delta < 0 ? "" : "+"), + delta, file, line, funcname, tag, obj ? obj->priv_data.ref_counter : -1); + fclose(refo); + } } if (obj->priv_data.ref_counter + delta == 0 && obj->priv_data.destructor_fn != NULL) { /* this isn't protected with lock; just for o/p */ - FILE *refo = fopen(REF_FILE,"a"); - fprintf(refo, "%p **call destructor** %s:%d:%s (%s)\n", user_data, file, line, funcname, tag); + FILE *refo = fopen(REF_FILE, "a"); + if (refo) { + fprintf(refo, "%p **call destructor** %s:%d:%s (%s)\n", user_data, file, line, funcname, tag); fclose(refo); + } } return internal_ao2_ref(user_data, delta); } @@ -319,14 +324,13 @@ void *__ao2_alloc_debug(size_t data_size, ao2_destructor_fn destructor_fn, char { /* allocation */ void *obj; - FILE *refo = ref_debug ? fopen(REF_FILE,"a") : NULL; + FILE *refo; if ((obj = internal_ao2_alloc(data_size, destructor_fn, file, line, funcname)) == NULL) { - fclose(refo); return NULL; } - if (refo) { + if (ref_debug && (refo = fopen(REF_FILE, "a"))) { fprintf(refo, "%p =1 %s:%d:%s (%s)\n", obj, file, line, funcname, tag); fclose(refo); } -- 2.47.2