fis-gtm/sr_port_cm/gtcm_exi_handler.c

66 lines
1.7 KiB
C

/****************************************************************
* *
* Copyright 2001, 2004 Sanchez Computer Associates, 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 "gtm_unistd.h"
#include "gdsroot.h"
#include "gtm_facility.h"
#include "fileinfo.h"
#include "gdsbt.h"
#include "gdsfhead.h"
#include "cmidef.h"
#include "hashtab_mname.h" /* needed for cmmdef.h */
#include "cmmdef.h"
#include "locklits.h"
#include "error.h"
#include "print_exit_stats.h"
#include "gtcmtr_protos.h"
#include "send_msg.h"
#include "gtmmsg.h"
#include "gtcm_exi_handler.h"
#ifdef VMS
# define EXICONDITION gtcm_exi_condition
#else
# define EXICONDITION exi_condition
#endif
GBLREF struct NTD *ntd_root;
GBLREF connection_struct *curr_entry;
GBLREF int4 EXICONDITION;
GBLREF uint4 process_id;
void gtcm_exi_handler()
{
struct CLB *p, *pn;
error_def(ERR_UNKNOWNFOREX);
error_def(ERR_GTCMEXITLOOP);
ESTABLISH(gtcm_exi_ch);
if (ntd_root)
{ /* Need a way to detect cycles in the loop below (C9C02-001908) */
for (p = (struct CLB *)RELQUE2PTR(ntd_root->cqh.fl); (p != (struct CLB *)ntd_root); p = pn)
{ /* Get the forward link, in case a close removes the current entry */
pn = (struct CLB *)RELQUE2PTR(p->cqe.fl);
curr_entry = (connection_struct*)(p->usr);
gtcmtr_terminate(FALSE);
}
}
print_exit_stats();
VMS_ONLY(
if (0 == EXICONDITION)
EXICONDITION = ERR_UNKNOWNFOREX;
);
PROCDIE(EXICONDITION);
}