Check fopen return value for ao2 reference debug output.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 25 Oct 2011 22:06:43 +0000 (22:06 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Tue, 25 Oct 2011 22:06:43 +0000 (22:06 +0000)
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
........

Merged revisions 342488 from http://svn.asterisk.org/svn/asterisk/branches/10

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@342489 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/astobj2.c

index 7a8bc62..df5e2ef 100644 (file)
@@ -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);
        }