mirror of
https://github.com/owntone/owntone-server.git
synced 2025-04-16 17:10:03 -04:00
Add function to let the memory watcher know about memory allocated in libraries
This commit is contained in:
parent
3993a75dbf
commit
f7e16d22ab
27
src/err.c
27
src/err.c
@ -134,6 +134,31 @@ int err_unlock_mutex(void) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Let the leak detector know about a chunk of memory
|
||||||
|
* that needs to be freed, but came from an external library
|
||||||
|
*/
|
||||||
|
void err_notify(char *file, int line, void *ptr) {
|
||||||
|
ERR_LEAK *pnew;
|
||||||
|
|
||||||
|
pnew=(ERR_LEAK*)malloc(sizeof(ERR_LEAK));
|
||||||
|
if(!pnew)
|
||||||
|
log_err(1,"Error: cannot allocate leak struct\n");
|
||||||
|
|
||||||
|
if(err_lock_mutex())
|
||||||
|
log_err(1,"Error: cannot lock error mutex\n");
|
||||||
|
|
||||||
|
pnew->file=file;
|
||||||
|
pnew->line=line;
|
||||||
|
pnew->size=0;
|
||||||
|
pnew->ptr=ptr;
|
||||||
|
|
||||||
|
pnew->next=err_leak.next;
|
||||||
|
err_leak.next=pnew;
|
||||||
|
|
||||||
|
err_unlock_mutex();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* err_malloc
|
* err_malloc
|
||||||
*
|
*
|
||||||
@ -199,7 +224,7 @@ void err_free(char *file, int line, void *ptr) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!current) {
|
if(!current) {
|
||||||
log_err(0,"Attempt to free unallocated memory: %s, %d\n",file,line);
|
log_err(1,"Attempt to free unallocated memory: %s, %d\n",file,line);
|
||||||
} else {
|
} else {
|
||||||
free(current->ptr);
|
free(current->ptr);
|
||||||
last->next=current->next;
|
last->next=current->next;
|
||||||
|
@ -48,12 +48,14 @@ extern void log_setdest(char *app, int destination);
|
|||||||
# define malloc(x) err_malloc(__FILE__,__LINE__,x)
|
# define malloc(x) err_malloc(__FILE__,__LINE__,x)
|
||||||
# define strdup(x) err_strdup(__FILE__,__LINE__,x)
|
# define strdup(x) err_strdup(__FILE__,__LINE__,x)
|
||||||
# define free(x) err_free(__FILE__,__LINE__,x)
|
# define free(x) err_free(__FILE__,__LINE__,x)
|
||||||
|
# define MEMNOTIFY(x) err_notify(__FILE__,__LINE__,x)
|
||||||
# endif /* __IN_ERR__ */
|
# endif /* __IN_ERR__ */
|
||||||
|
|
||||||
|
|
||||||
extern void *err_malloc(char *file, int line, size_t size);
|
extern void *err_malloc(char *file, int line, size_t size);
|
||||||
extern char *err_strdup(char *file, int line, const char *str);
|
extern char *err_strdup(char *file, int line, const char *str);
|
||||||
extern void err_free(char *file, int line, void *ptr);
|
extern void err_free(char *file, int line, void *ptr);
|
||||||
|
extern void err_notify(char *file, int line, void *ptr);
|
||||||
extern void err_leakcheck(void);
|
extern void err_leakcheck(void);
|
||||||
|
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user