add get_child_refs, tests are ok
[protos/libecoli.git] / lib / main.c
index 1c93f9a..1b2b7ef 100644 (file)
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: BSD-3-Clause
- * Copyright (c) 2016, Olivier MATZ <zer0@droids-corp.org>
+ * Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
  */
 
 #include <stdlib.h>
@@ -15,6 +15,7 @@
 #include <ecoli_test.h>
 #include <ecoli_malloc.h>
 
+/* LCOV_EXCL_START */
 EC_LOG_TYPE_REGISTER(main);
 
 #define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / \
@@ -141,6 +142,7 @@ static struct debug_alloc_hdr_list debug_alloc_hdr_list =
 struct debug_alloc_hdr {
        TAILQ_ENTRY(debug_alloc_hdr) next;
        const char *file;
+       unsigned int seq;
        unsigned int line;
        size_t size;
        void *stack[STACK_SZ];
@@ -152,6 +154,8 @@ struct debug_alloc_ftr {
        unsigned int cookie;
 } __attribute__((packed));
 
+static int malloc_seq;
+
 static void *debug_malloc(size_t size, const char *file, unsigned int line)
 {
        struct debug_alloc_hdr *hdr;
@@ -159,7 +163,6 @@ static void *debug_malloc(size_t size, const char *file, unsigned int line)
        size_t new_size = size + sizeof(*hdr) + sizeof(*ftr);
        void *ret;
        int r = random();
-       static int seq;
 
        if (alloc_fail_proba != 0 && (r % 100) < alloc_fail_proba)
                hdr = NULL;
@@ -169,6 +172,7 @@ static void *debug_malloc(size_t size, const char *file, unsigned int line)
        if (hdr == NULL) {
                ret = NULL;
        } else {
+               hdr->seq = malloc_seq;
                hdr->file = file;
                hdr->line = line;
                hdr->size = size;
@@ -182,7 +186,7 @@ static void *debug_malloc(size_t size, const char *file, unsigned int line)
        }
 
        EC_LOG(EC_LOG_DEBUG, "%s:%d: info: malloc(%zd) -> %p seq=%d\n",
-               file, line, size, ret, seq++);
+               file, line, size, ret, malloc_seq++);
 
        if (ret)
                alloc_success++;
@@ -284,6 +288,7 @@ static void *debug_realloc(void *ptr, size_t size, const char *file,
        }
 
        if (hdr != NULL) {
+               hdr->seq = malloc_seq;
                hdr->file = file;
                hdr->line = line;
                hdr->size = size;
@@ -295,8 +300,8 @@ static void *debug_realloc(void *ptr, size_t size, const char *file,
                ftr->cookie = 0x87654321;
        }
 
-       EC_LOG(EC_LOG_DEBUG, "%s:%d: info: realloc(%p, %zd) -> %p\n",
-               file, line, ptr, size, ret);
+       EC_LOG(EC_LOG_DEBUG, "%s:%d: info: realloc(%p, %zd) -> %p seq=%d\n",
+               file, line, ptr, size, ret, malloc_seq++);
 
        if (ret)
                alloc_success++;
@@ -316,8 +321,8 @@ static int debug_alloc_dump_leaks(void)
 
        TAILQ_FOREACH(hdr, &debug_alloc_hdr_list, next) {
                EC_LOG(EC_LOG_ERR,
-                       "%s:%d: error: memory leak size=%zd ptr=%p\n",
-                       hdr->file, hdr->line, hdr->size, hdr + 1);
+                       "%s:%d: error: memory leak seq=%u size=%zd ptr=%p\n",
+                       hdr->file, hdr->line, hdr->seq, hdr->size, hdr + 1);
                buffer = backtrace_symbols(hdr->stack, hdr->stacklen);
                if (buffer == NULL) {
                        for (i = 0; i < hdr->stacklen; i++)
@@ -399,3 +404,4 @@ int main(int argc, char **argv)
 
        return 0;
 }
+/* LCOV_EXCL_STOP */