Write to memory management log
authorMark Spencer <markster@digium.com>
Tue, 6 May 2003 00:01:32 +0000 (00:01 +0000)
committerMark Spencer <markster@digium.com>
Tue, 6 May 2003 00:01:32 +0000 (00:01 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@963 65c4cc65-6c06-0410-ace0-fbb531ad65f3

Makefile
astmm.c

index a2b2078..39f965d 100755 (executable)
--- a/Makefile
+++ b/Makefile
@@ -49,7 +49,7 @@ TRACE_FRAMES = #-DTRACE_FRAMES
 #   *CLI> show memory allocations [filename]
 #   *CLI> show memory summary [filename]
 #
-MALLOC_DEBUG = #-include $(PWD)/include/asterisk/astmm.h
+MALLOC_DEBUG = -include $(PWD)/include/asterisk/astmm.h
 
 # Where to install asterisk after compiling
 # Default -> leave empty
diff --git a/astmm.c b/astmm.c
index eea3229..49cb3bb 100755 (executable)
--- a/astmm.c
+++ b/astmm.c
 #include <stdio.h>
 #include <string.h>
 #include <pthread.h>
+#include <time.h>
 #include <asterisk/cli.h>
+#include <asterisk/logger.h>
+#include <asterisk/options.h>
 
 #define SOME_PRIME 563
 
@@ -37,6 +40,8 @@
 #undef strndup
 #undef free
 
+static FILE *mmlog;
+
 static struct ast_region {
        struct ast_region *next;
        char file[40];
@@ -75,6 +80,8 @@ static inline void *__ast_alloc_region(size_t size, int which, const char *file,
        pthread_mutex_unlock(&reglock);
        if (!reg) {
                fprintf(stderr, "Out of memory :(\n");
+               if (mmlog)
+                       fprintf(stderr, "%ld - Out of memory\n", time(NULL));
        }
        return ptr;
 }
@@ -119,9 +126,13 @@ static void __ast_free_region(void *ptr, const char *file, int lineno, const cha
        pthread_mutex_unlock(&reglock);
        if (reg) {
                free(reg);
-       } else
+       } else {
                fprintf(stderr, "WARNING: Freeing unused memory at %p, in %s of %s, line %d\n",
                        ptr, func, file, lineno);
+               if (mmlog)
+                       fprintf(mmlog, "%ld - WARNING: Freeing unused memory at %p, in %s of %s, line %d\n", time(NULL),
+                       ptr, func, file, lineno);
+       }
 }
 
 void *__ast_calloc(size_t nmemb, size_t size, const char *file, int lineno, const char *func) 
@@ -152,6 +163,9 @@ void *__ast_realloc(void *ptr, size_t size, const char *file, int lineno, const
                if (!len) {
                        fprintf(stderr, "WARNING: Realloc of unalloced memory at %p, in %s of %s, line %d\n",
                                ptr, func, file, lineno);
+                       if (mmlog)
+                               fprintf(mmlog, "%ld - WARNING: Realloc of unalloced memory at %p, in %s of %s, line %d\n",
+                                       time(NULL), ptr, func, file, lineno);
                        return NULL;
                }
        }
@@ -314,6 +328,11 @@ void __ast_mm_init(void)
 {
        ast_cli_register(&show_memory_allocations_cli);
        ast_cli_register(&show_memory_summary_cli);
+       mmlog = fopen("/var/log/asterisk/mmlog", "a+");
+       if (option_verbose)
+               ast_verbose("Asterisk Malloc Debugger Started (see /var/log/mmlog)\n");
+       if (mmlog)
+               fprintf(mmlog, "%ld - New session\n", time(NULL));
 }
 
 #endif