Browse Source

1

congestion
Charlie Root 5 months ago
parent
commit
e596564abd
  1. 10
      lib/mem.c
  2. 1
      lib/mem.h
  3. 6
      lib/memory_pool.h
  4. 2
      src/utun.c

10
lib/mem.c

@ -209,14 +209,6 @@ char* u_strdup_impl(const char* s, const char* location) {
return copy;
}
void u_mem_get_counters(size_t* allocations, size_t* frees, size_t* allocated) {
LOCK();
if (allocations) *allocations = allocations_count;
if (frees) *frees = frees_count;
if (allocated) *allocated = allocated_count;
UNLOCK();
}
void u_report_unfreed_blocks(void) {
LOCK();
size_t count = allocated_count;
@ -229,7 +221,7 @@ void u_report_unfreed_blocks(void) {
DEBUG_INFO(DEBUG_CATEGORY_MEMORY, "No unfreed memory blocks.");
return;
}
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, "Unfreed memory blocks: %zu", count);
DEBUG_ERROR(DEBUG_CATEGORY_MEMORY, "Unfreed memory blocks: %zu, allocations: %zu frees: %zu", count, allocations_count, frees_count);
void* curr = head;
while (curr) {
char* alloc_loc = (char*)curr;

1
lib/mem.h

@ -23,7 +23,6 @@ void* u_calloc_impl(uint32_t nmemb, uint32_t size, const char* location);
void* u_realloc_impl(void* ptr, uint32_t size, const char* location);
void u_free_impl(void* ptr, const char* location);
char* u_strdup_impl(const char* s, const char* location);
void u_mem_get_counters(size_t* allocations, size_t* frees, size_t* allocated);
void u_report_unfreed_blocks(void);
#ifdef __cplusplus
}

6
lib/memory_pool.h

@ -9,7 +9,7 @@
#define XSTR(s) STR(s)
#define STR(s) #s
#define LOCATION __FILE__ ":" XSTR(__LINE__)
#define PLOCATION __FILE__ ":" XSTR(__LINE__) "[POOL]"
struct memory_pool {
void* free_head; // Голова linked list свободных блоков (next хранится в начале каждого блока)
@ -29,7 +29,7 @@ void* memory_pool_alloc_impl(struct memory_pool* pool, const char* location);
void memory_pool_free_impl(struct memory_pool* pool, void* obj, const char* location);
void memory_pool_get_stats(struct memory_pool* pool, size_t* allocations, size_t* reuse_count);
#define memory_pool_alloc(pool) memory_pool_alloc_impl(pool, LOCATION)
#define memory_pool_free(pool, obj) memory_pool_free_impl(pool, obj, LOCATION)
#define memory_pool_alloc(pool) memory_pool_alloc_impl(pool, PLOCATION)
#define memory_pool_free(pool, obj) memory_pool_free_impl(pool, obj, PLOCATION)
#endif // MEMORY_POOL_H

2
src/utun.c

@ -405,11 +405,11 @@ int main(int argc, char *argv[]) {
// Cleanup
DEBUG_ERROR(DEBUG_CATEGORY_ETCP, "Shutdown");
u_report_unfreed_blocks();
if (instance) {
utun_instance_destroy(instance);
}
u_report_unfreed_blocks();
// Destroy uasync instance after instance is destroyed
if (ua) {

Loading…
Cancel
Save