63 lines
2.3 KiB
C
63 lines
2.3 KiB
C
/****************************************************************
|
|
* *
|
|
* Copyright 2001, 2011 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. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
/* Generate a core if we need one and haven't done it yet */
|
|
|
|
#include "mdef.h"
|
|
#include "error.h"
|
|
#include "gtmdbglvl.h"
|
|
|
|
GBLREF boolean_t created_core;
|
|
GBLREF boolean_t dont_want_core;
|
|
GBLREF boolean_t need_core;
|
|
GBLREF uint4 gtmDebugLevel;
|
|
|
|
/* Create our own version of the DUMP macro that does not include stack overflow. This
|
|
error is handled better inside mdb_condition_handler which should be the top level
|
|
handler whenever that error is raised. I would add an assert for that but this would
|
|
force mdb_condition_handler to be included in all the images we build forcing them
|
|
to be larger than they should be by pulling in the transfer table referenced in
|
|
mdb_condition_handler. Not doing the dump here does not prevent the core from occuring,
|
|
it just delays where it would occur should ERR_STACKOFLOW be signaled from a utility
|
|
routine for some reason. Note that the DUMP macro below is defined in error.h and is
|
|
expanded as part of the DUMPABLE macro below (10/2000 se).
|
|
|
|
Since ERR_STACKOFLOW has the type of fatal, we must explicitly check that this error
|
|
is NOT ERR_STACKOFLOW. 1/2001 se.
|
|
The ERR_MEMORY error now gets same treatment as ERR_STACKOFLOW 2008-01-11 se.
|
|
*/
|
|
#undef DUMP
|
|
#define DUMP ( SIGNAL == (int)ERR_ASSERT \
|
|
|| SIGNAL == (int)ERR_GTMASSERT \
|
|
|| SIGNAL == (int)ERR_GTMASSERT2 \
|
|
|| SIGNAL == (int)ERR_GTMCHECK) /* BYPASSOK */
|
|
|
|
error_def(ERR_ASSERT);
|
|
error_def(ERR_GTMASSERT);
|
|
error_def(ERR_GTMASSERT2);
|
|
error_def(ERR_GTMCHECK);
|
|
error_def(ERR_MEMORY);
|
|
error_def(ERR_OUTOFSPACE);
|
|
error_def(ERR_STACKOFLOW);
|
|
|
|
void ch_cond_core(void)
|
|
{
|
|
boolean_t cond_core_signal;
|
|
|
|
cond_core_signal = (ERR_STACKOFLOW == SIGNAL) || (ERR_MEMORY == SIGNAL);
|
|
if (DUMPABLE && ((cond_core_signal && (GDL_DumpOnStackOFlow & gtmDebugLevel)) || !cond_core_signal) && !SUPPRESS_DUMP)
|
|
{
|
|
need_core = TRUE;
|
|
gtm_fork_n_core();
|
|
}
|
|
|
|
}
|