mirror of https://github.com/sipwise/heartbeat.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
4.0 KiB
113 lines
4.0 KiB
/*
|
|
* ha_malloc.h: malloc utilities for the Linux-HA heartbeat program
|
|
*
|
|
* Copyright (C) 2000 Alan Robertson <alanr@unix.sh>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*/
|
|
#ifdef CL_USE_LIBC_MALLOC
|
|
/* Use libc malloc and friends. Useful when running valgrind etc. */
|
|
# ifndef _CLPLUMBING_CLMALLOC_NATIVE_H
|
|
# define _CLPLUMBING_CLMALLOC_NATIVE_H
|
|
|
|
/* Prevent the regular cl_malloc header from being included */
|
|
# define _CLPLUMBING_CLMALLOC_H
|
|
|
|
# include <stdlib.h>
|
|
# include <string.h>
|
|
|
|
# define cl_free free
|
|
# define cl_malloc malloc
|
|
# define cl_calloc calloc
|
|
# define cl_realloc realloc
|
|
# define cl_strdup strdup
|
|
# define cl_is_allocated(mem) (mem!=NULL)
|
|
|
|
# define MALLOCT(t) ((t *) malloc(sizeof(t)))
|
|
# define cl_malloc_forced_for_glib() ;
|
|
# define cl_malloc_setstats(x) ;
|
|
|
|
typedef struct cl_mem_stats_s {
|
|
unsigned long numalloc; /* # of cl_malloc calls */
|
|
unsigned long numfree; /* # of cl_free calls */
|
|
unsigned long numrealloc; /* # of cl_realloc calls */
|
|
unsigned long nbytes_req; /* # malloc bytes req'd */
|
|
unsigned long nbytes_alloc; /* # bytes currently allocated
|
|
*/
|
|
unsigned long mallocbytes; /* total # bytes malloc()ed */
|
|
unsigned long arena; /* Most recent mallinfo */
|
|
/* arena value */
|
|
}cl_mem_stats_t;
|
|
|
|
# endif
|
|
#endif
|
|
|
|
#ifndef _CLPLUMBING_CLMALLOC_H
|
|
#define _CLPLUMBING_CLMALLOC_H
|
|
|
|
typedef struct cl_mem_stats_s {
|
|
unsigned long numalloc; /* # of cl_malloc calls */
|
|
unsigned long numfree; /* # of cl_free calls */
|
|
unsigned long numrealloc; /* # of cl_realloc calls */
|
|
unsigned long nbytes_req; /* # malloc bytes req'd */
|
|
unsigned long nbytes_alloc; /* # bytes currently allocated
|
|
*/
|
|
unsigned long mallocbytes; /* total # bytes malloc()ed */
|
|
unsigned long arena; /* Most recent mallinfo */
|
|
/* arena value */
|
|
}cl_mem_stats_t;
|
|
|
|
/* This allows the code to track _all_ allocated memory, who allocated
|
|
* it and from where in the code it was allocated. It is a very memory
|
|
* expensive debugging tool and NOT! meant for production: */
|
|
#undef HA_MALLOC_TRACK
|
|
|
|
void* cl_malloc(size_t size);
|
|
void* cl_calloc(size_t nmemb, size_t size);
|
|
void* cl_realloc(void* oldval, size_t newsize);
|
|
#ifdef HA_MALLOC_TRACK
|
|
void* cl_malloc_track(size_t size,
|
|
const char *file, const char *function, const int line);
|
|
void* cl_calloc_track(size_t nmemb, size_t size,
|
|
const char *file, const char *function, const int line);
|
|
void* cl_realloc_track(void* oldval, size_t newsize,
|
|
const char *file, const char *function, const int line);
|
|
#ifndef HA_MALLOC_ORIGINAL
|
|
#define cl_malloc(s) cl_malloc_track(s, \
|
|
__FILE__, __PRETTY_FUNCTION__, __LINE__)
|
|
#define cl_calloc(n,s) cl_calloc_track(n,s, \
|
|
__FILE__, __PRETTY_FUNCTION__, __LINE__)
|
|
#define cl_realloc(o,s) cl_realloc_track(o,s, \
|
|
__FILE__, __PRETTY_FUNCTION__, __LINE__)
|
|
#endif
|
|
#endif
|
|
char* cl_strdup(const char *s);
|
|
void cl_free(void *ptr);
|
|
int cl_is_allocated(const void *ptr);
|
|
void cl_malloc_report(void);
|
|
void cl_malloc_setstats(volatile cl_mem_stats_t*);
|
|
volatile cl_mem_stats_t* cl_malloc_getstats(void);
|
|
void cl_malloc_forced_for_glib(void);
|
|
/* Call before using any glib functions(!) */
|
|
/* See also: g_mem_set_vtable() */
|
|
#ifdef HA_MALLOC_TRACK
|
|
int cl_malloc_dump_allocated(int log_level, int filter_seen);
|
|
#endif
|
|
|
|
#define MALLOCT(t) ((t *) cl_malloc(sizeof(t)))
|
|
|
|
#endif /* _CLPLUMBING_CLMALLOC_H */
|