fis-gtm/sr_port/gtm_malloc_dbg.c

81 lines
3.1 KiB
C
Raw Normal View History

/****************************************************************
* *
* Copyright 2001, 2009 Fidelity Information Services, Inc *
* *
* This source code contains the intellectual property *
* of its copyright holder(s), and is made available *
* under a license. If you do not know the terms of *
* the license, please stop and do not read further. *
* *
****************************************************************/
/* gtm_malloc_dbg -- the debugging version
The bulk of the GTM storage manager code now sits in gtm_malloc_src.h and
is included twice: once in gtm_malloc.c and again in gtm_malloc_dbg.c.
The reason for this is that the production modules built for distribution
in the field can have both forms of storage mgmt available in the event
that it becomes necessary to chase a corruption issue. It can now be done
without resorting to a "debug" version. Several different levels of
debugging will also be made available to catch various problems.
If the DEBUG flag is not defined (indicating a pro build), the gtm_malloc
module will expand without all the asserts and special checking making for
a compact and efficient storage manager. The gtm_malloc_dbg module will
expand AS IF DEBUG had been specified supplying an alternate assert filled
version of storage mgmnt with several different levels of storage validation
available.
If the DEBUG flag is defined (debug or beta build), the gtm_malloc module
will expand with all debugging information intact and the gtm_malloc_dbg
module will expand as call backs to the gtm_malloc module since it makes
little sense to expand the identical module twice.
*/
#ifndef DEBUG
/* We have a PRO build -- generate a full debug version with debug versions of
our global names */
# define gtmSmInit gtmSmInit_dbg
# define gtm_malloc gtm_malloc_dbg
# define gtm_free gtm_free_dbg
# define findStorElem findStorElem_dbg
# define processDeferredFrees processDeferredFrees_dbg
# define release_unused_storage release_unused_storage_dbg
# define raise_gtmmemory_error raise_gtmmemory_error_dbg
# define gtm_bestfitsize gtm_bestfitsize_dbg
# define DEBUG
# define PRO_BUILD
# define GTM_MALLOC_DEBUG
# include "caller_id.h"
# include "gtm_malloc_src.h"
#else
/* We have a DEBUG build -- Nobody should call gtm_malloc_dbg directly */
# include "mdef.h"
# include "gtm_malloc.h"
/* Include some defs for these rtns to keep the compiler quiet for this routine.
Nobody should be calling these directly so we don't want them where they can
get included anywhere else.
Note the real versions of these routines are defined and only used/callable from
the gtm_malloc_src.h include so when we define them here for completeness in a dbg
build, we change the return signature to not return anything (saves us from having
to put a "return" after the GTMASSERTS). These are just "catchalls" in case the
expansion functioned incorrectly.
*/
void gtm_malloc_dbg(size_t size);
void gtm_free_dbg(void *addr);
void gtm_malloc_dbg(size_t size)
{
GTMASSERT;
}
void gtm_free_dbg(void *addr)
{
GTMASSERT;
}
#endif