64 lines
1.7 KiB
C
64 lines
1.7 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. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
/* rc_rundown - GT.CM global database cleanup
|
|
* Go through each global database and reset the "dsid" field in the header
|
|
* to zero, indicating that GT.CM is not accessing this file. This is
|
|
* necessary so that GT.M processes will not try to access the GT.CM
|
|
* semaphore lock.
|
|
*/
|
|
|
|
#include "mdef.h"
|
|
#include "rc.h"
|
|
#include "gtm_facility.h"
|
|
#include "fileinfo.h"
|
|
#include "gdsroot.h"
|
|
#include "gdsbt.h"
|
|
#include "gdsfhead.h"
|
|
#include "rc_nspace.h"
|
|
#include "filestruct.h"
|
|
|
|
GBLREF rc_dsid_list *dsid_list;
|
|
GBLREF sgmnt_addrs *cs_addrs;
|
|
GBLREF sgmnt_data_ptr_t cs_data;
|
|
GBLREF gd_region *gv_cur_region;
|
|
|
|
void rc_rundown(void)
|
|
{
|
|
rc_dsid_list *fdi_ptr;
|
|
int dsid;
|
|
|
|
for (fdi_ptr = dsid_list; fdi_ptr; fdi_ptr = fdi_ptr->next)
|
|
{
|
|
if (fdi_ptr->gda)
|
|
{
|
|
cs_addrs = &FILE_INFO(fdi_ptr->gda->maps[1].reg.addr)->s_addrs;
|
|
gv_cur_region = fdi_ptr->gda->maps[1].reg.addr;
|
|
|
|
cs_data = cs_addrs->hdr;
|
|
dsid = cs_data->dsid;
|
|
|
|
if (fdi_ptr->dsid != RC_NSPACE_DSID)
|
|
{
|
|
assert(!cs_addrs->hold_onto_crit); /* so we can safely do unconditional grab_crit and rel_crit */
|
|
grab_crit(gv_cur_region);
|
|
if (--cs_data->rc_srv_cnt <= 0)
|
|
{
|
|
cs_data->rc_node = cs_data->dsid = 0;
|
|
cs_data->rc_srv_cnt = 0;
|
|
cs_addrs->hdr->dsid = 0;
|
|
}
|
|
rel_crit(gv_cur_region);
|
|
}
|
|
}
|
|
}
|
|
}
|