X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FmemoryDebug.c;h=c42559233023cc0c7e013c29f2974423082bc9af;hb=54ef844b721b720e9cc81dc4737c299a0e84cb59;hp=442e618e1dfe0dbbf144d387bc82bcf947db1151;hpb=3b03d79e0abdb8ed15dcc8943cf761f2a2775cf1;p=NeonServV5.git diff --git a/src/memoryDebug.c b/src/memoryDebug.c index 442e618..c425592 100644 --- a/src/memoryDebug.c +++ b/src/memoryDebug.c @@ -1,4 +1,4 @@ -/* memoryDebug.c - NeonServ v5.3 +/* memoryDebug.c - NeonServ v5.6 * Copyright (C) 2011-2012 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -17,6 +17,7 @@ #include "main.h" #include "memoryDebug.h" #include "memoryInfo.h" +#include "tools.h" #define FILE_NAME_LENGTH 256 #define OUTPUT_FILE "leak_info.txt" @@ -44,6 +45,8 @@ static pthread_mutex_t synchronized; static struct MemoryLeak *ptr_start = NULL; +static unsigned int own_allocated_memleaks = 0; + static void add_mem_info(void * mem_ref, unsigned int size, const char *file, unsigned int line); static void remove_mem_info(void * mem_ref); @@ -81,7 +84,8 @@ void xfree(void *mem_ref) { static void add_mem_info(void *mem_ref, unsigned int size, const char *file, unsigned int line) { SYNCHRONIZE(synchronized); - struct MemoryLeak *mem_leak_info = malloc (sizeof(*mem_leak_info)); + struct MemoryLeak *mem_leak_info = malloc(sizeof(*mem_leak_info)); + own_allocated_memleaks++; mem_leak_info->mem_info.address = mem_ref; mem_leak_info->mem_info.size = size; strcpy(mem_leak_info->mem_info.file_name, file); @@ -101,6 +105,7 @@ static void remove_mem_info(void *mem_ref) { prev->next = next; else ptr_start = next; + own_allocated_memleaks--; free(leak_info); break; } else @@ -109,35 +114,6 @@ static void remove_mem_info(void *mem_ref) { DESYNCHRONIZE(synchronized); } -void report_mem_leak() { - SYNCHRONIZE(synchronized); - struct MemoryLeak *leak_info; - FILE *fp_write = fopen(OUTPUT_FILE, "wt"); - char info[1024]; - - if(fp_write != NULL) { - sprintf(info, "%s\n", "Memory Leak Summary"); - fwrite(info, (strlen(info)) , 1, fp_write); - sprintf(info, "%s\n", "-----------------------------------"); - fwrite(info, (strlen(info)) , 1, fp_write); - - for(leak_info = ptr_start; leak_info != NULL; leak_info = leak_info->next) { - sprintf(info, "address : %p\n", leak_info->mem_info.address); - fwrite(info, (strlen(info)) , 1, fp_write); - sprintf(info, "size : %d bytes\n", leak_info->mem_info.size); - fwrite(info, (strlen(info)) , 1, fp_write); - sprintf(info, "file : %s\n", leak_info->mem_info.file_name); - fwrite(info, (strlen(info)) , 1, fp_write); - sprintf(info, "line : %d\n", leak_info->mem_info.line); - fwrite(info, (strlen(info)) , 1, fp_write); - sprintf(info, "%s\n", "-----------------------------------"); - fwrite(info, (strlen(info)) , 1, fp_write); - } - } - fclose(fp_write); - DESYNCHRONIZE(synchronized); -} - void initMemoryDebug() { THREAD_MUTEX_INIT(synchronized); } @@ -163,8 +139,14 @@ struct memoryInfoFiles *getMemoryInfoFiles() { element->allocations += 1; element->allocated += leak_info->mem_info.size; } + element = malloc(sizeof(*element)); + element->filename = strdup(__FILE__); + element->allocations = own_allocated_memleaks; + element->allocated = own_allocated_memleaks * sizeof(struct MemoryLeak); + element->next = list; + list = element; DESYNCHRONIZE(synchronized); - return element; + return list; } void freeMemoryInfoFiles(struct memoryInfoFiles *files) { @@ -197,8 +179,16 @@ struct memoryInfoLines *getMemoryInfoLines(const char *filename) { } element->allocations++; } + if(!stricmp(filename, __FILE__)) { + element = malloc(sizeof(*element)); + element->line = 0; + element->allocations = own_allocated_memleaks; + element->allocate = sizeof(struct MemoryLeak); + element->next = list; + list = element; + } DESYNCHRONIZE(synchronized); - return element; + return list; } void freeMemoryInfoLines(struct memoryInfoLines *lines) {