mirror of
https://github.com/NLnetLabs/unbound.git
synced 2024-09-21 06:37:08 +00:00
- Fix that alloc stats has strdup checks, it stops debuggers from
complaining about mismatch at free time.
This commit is contained in:
parent
92be76fb89
commit
befa7d8cd8
@ -1496,6 +1496,7 @@ struct sockaddr_storage;
|
|||||||
# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
|
# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
|
||||||
# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
|
# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
|
||||||
# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
|
# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
|
||||||
|
# define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__)
|
||||||
void *unbound_stat_malloc(size_t size);
|
void *unbound_stat_malloc(size_t size);
|
||||||
void *unbound_stat_calloc(size_t nmemb, size_t size);
|
void *unbound_stat_calloc(size_t nmemb, size_t size);
|
||||||
void unbound_stat_free(void *ptr);
|
void unbound_stat_free(void *ptr);
|
||||||
@ -1508,6 +1509,8 @@ void unbound_stat_free_log(void *ptr, const char* file, int line,
|
|||||||
const char* func);
|
const char* func);
|
||||||
void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
|
void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
|
||||||
int line, const char* func);
|
int line, const char* func);
|
||||||
|
char *unbound_stat_strdup_log(const char *s, const char* file, int line,
|
||||||
|
const char* func);
|
||||||
#elif defined(UNBOUND_ALLOC_LITE)
|
#elif defined(UNBOUND_ALLOC_LITE)
|
||||||
# include "util/alloc.h"
|
# include "util/alloc.h"
|
||||||
#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
|
#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
|
||||||
|
@ -2329,6 +2329,7 @@ struct sockaddr_storage;
|
|||||||
# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
|
# define calloc(n,s) unbound_stat_calloc_log(n, s, __FILE__, __LINE__, __func__)
|
||||||
# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
|
# define free(p) unbound_stat_free_log(p, __FILE__, __LINE__, __func__)
|
||||||
# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
|
# define realloc(p,s) unbound_stat_realloc_log(p, s, __FILE__, __LINE__, __func__)
|
||||||
|
# define strdup(s) unbound_stat_strdup_log(s, __FILE__, __LINE__, __func__)
|
||||||
void *unbound_stat_malloc(size_t size);
|
void *unbound_stat_malloc(size_t size);
|
||||||
void *unbound_stat_calloc(size_t nmemb, size_t size);
|
void *unbound_stat_calloc(size_t nmemb, size_t size);
|
||||||
void unbound_stat_free(void *ptr);
|
void unbound_stat_free(void *ptr);
|
||||||
@ -2341,6 +2342,8 @@ void unbound_stat_free_log(void *ptr, const char* file, int line,
|
|||||||
const char* func);
|
const char* func);
|
||||||
void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
|
void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
|
||||||
int line, const char* func);
|
int line, const char* func);
|
||||||
|
char *unbound_stat_strdup_log(const char *s, const char* file, int line,
|
||||||
|
const char* func);
|
||||||
#elif defined(UNBOUND_ALLOC_LITE)
|
#elif defined(UNBOUND_ALLOC_LITE)
|
||||||
# include "util/alloc.h"
|
# include "util/alloc.h"
|
||||||
#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
|
#endif /* UNBOUND_ALLOC_LITE and UNBOUND_ALLOC_STATS */
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
2 August 2024: Wouter
|
||||||
|
- Fix that alloc stats has strdup checks, it stops debuggers from
|
||||||
|
complaining about mismatch at free time.
|
||||||
|
|
||||||
1 August 2024: Wouter
|
1 August 2024: Wouter
|
||||||
- Fix dnstap test program, cleans up to have clean memory on exit,
|
- Fix dnstap test program, cleans up to have clean memory on exit,
|
||||||
for tap_data_free, does not delete NULL items. Also it does not try
|
for tap_data_free, does not delete NULL items. Also it does not try
|
||||||
|
22
util/alloc.c
22
util/alloc.c
@ -466,6 +466,19 @@ void *unbound_stat_realloc(void *ptr, size_t size)
|
|||||||
memcpy(res+8, &mem_special, sizeof(mem_special));
|
memcpy(res+8, &mem_special, sizeof(mem_special));
|
||||||
return res+16;
|
return res+16;
|
||||||
}
|
}
|
||||||
|
/** strdup with stats */
|
||||||
|
char *unbound_stat_strdup(const char* s)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
char* res;
|
||||||
|
if(!s) return NULL;
|
||||||
|
len = strlen(s);
|
||||||
|
res = unbound_stat_malloc(len+1);
|
||||||
|
if(!res) return NULL;
|
||||||
|
memmove(res, s, len);
|
||||||
|
res[len]=0;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/** log to file where alloc was done */
|
/** log to file where alloc was done */
|
||||||
void *unbound_stat_malloc_log(size_t size, const char* file, int line,
|
void *unbound_stat_malloc_log(size_t size, const char* file, int line,
|
||||||
@ -507,6 +520,15 @@ void *unbound_stat_realloc_log(void *ptr, size_t size, const char* file,
|
|||||||
return unbound_stat_realloc(ptr, size);
|
return unbound_stat_realloc(ptr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** log to file where strdup was done */
|
||||||
|
char *unbound_stat_strdup_log(const char *s, const char* file, int line,
|
||||||
|
const char* func)
|
||||||
|
{
|
||||||
|
log_info("%s:%d %s strdup size %u", file, line, func,
|
||||||
|
(s?(unsigned)strlen(s)+1:0));
|
||||||
|
return unbound_stat_strdup(s);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* UNBOUND_ALLOC_STATS */
|
#endif /* UNBOUND_ALLOC_STATS */
|
||||||
#ifdef UNBOUND_ALLOC_LITE
|
#ifdef UNBOUND_ALLOC_LITE
|
||||||
#undef malloc
|
#undef malloc
|
||||||
|
Loading…
Reference in New Issue
Block a user