73 lines
2.1 KiB
C
73 lines
2.1 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2010 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. *
|
||
|
* *
|
||
|
****************************************************************/
|
||
|
|
||
|
#include "mdef.h"
|
||
|
|
||
|
#include "gdsroot.h"
|
||
|
#include "gdsbt.h"
|
||
|
#include "gdsblk.h"
|
||
|
#include "gtm_facility.h"
|
||
|
#include "fileinfo.h"
|
||
|
#include "gdsfhead.h"
|
||
|
#include "filestruct.h"
|
||
|
#include "error.h"
|
||
|
#include "gt_timer.h"
|
||
|
#include "util.h"
|
||
|
#include "gv_rundown.h"
|
||
|
#include "print_exit_stats.h"
|
||
|
#include "secshr_db_clnup.h"
|
||
|
#include "gtmimagename.h"
|
||
|
#include "dpgbldir.h"
|
||
|
|
||
|
GBLREF boolean_t need_core;
|
||
|
GBLREF boolean_t created_core;
|
||
|
GBLREF boolean_t exit_handler_active;
|
||
|
GBLREF uint4 dollar_tlevel;
|
||
|
GBLREF boolean_t hold_onto_crit;
|
||
|
|
||
|
void util_exit_handler()
|
||
|
{
|
||
|
int stat;
|
||
|
gd_region *r_top, *reg;
|
||
|
sgmnt_addrs *csa;
|
||
|
gd_addr *addr_ptr;
|
||
|
|
||
|
if (exit_handler_active) /* Don't recurse if exit handler exited */
|
||
|
return;
|
||
|
exit_handler_active = TRUE;
|
||
|
SET_PROCESS_EXITING_TRUE; /* set this BEFORE cancelling timers as wcs_phase2_commit_wait relies on this */
|
||
|
if (IS_DSE_IMAGE)
|
||
|
{ /* Need to clear csa->hold_onto_crit in case it was set */
|
||
|
for (addr_ptr = get_next_gdr(NULL); addr_ptr; addr_ptr = get_next_gdr(addr_ptr))
|
||
|
{
|
||
|
for (reg = addr_ptr->regions, r_top = reg + addr_ptr->n_regions; reg < r_top; reg++)
|
||
|
{
|
||
|
if (reg->open && !reg->was_open)
|
||
|
{
|
||
|
csa = &FILE_INFO(reg)->s_addrs;
|
||
|
csa->hold_onto_crit = FALSE; /* need to do this before the rel_crit */
|
||
|
if (csa->now_crit)
|
||
|
rel_crit(reg);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
cancel_timer(0); /* Cancel all timers - No unpleasant surprises */
|
||
|
secshr_db_clnup(NORMAL_TERMINATION);
|
||
|
assert(!dollar_tlevel); /* MUPIP and GT.M are the only ones which can run TP and they have their own exit handlers.
|
||
|
* So no need to run op_trollback here like mupip_exit_handler and gtm_exit_handler. */
|
||
|
gv_rundown();
|
||
|
print_exit_stats();
|
||
|
util_out_close();
|
||
|
if (need_core && !created_core)
|
||
|
DUMP_CORE;
|
||
|
}
|