1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
/****************************************************************
* *
* Copyright (c) 2001-2019 Fidelity National Information *
* Services, Inc. and/or its subsidiaries. All rights reserved. *
* *
* 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. *
* *
****************************************************************/
/* This function returns a pointer to the bt_rec entry or 0 if not found. */
#include "mdef.h"
#include "gdsroot.h"
#include "gtm_facility.h"
#include "fileinfo.h"
#include "gdsbt.h"
#include "gdsfhead.h"
#include "gdsbgtr.h" /* for the BG_TRACE_PRO macros */
GBLREF sgmnt_addrs *cs_addrs;
bt_rec_ptr_t bt_get(block_id block) /* block = block # to get */
{
register sgmnt_addrs *csa;
bt_rec_ptr_t bt;
int lcnt;
csa = cs_addrs;
assert(csa->now_crit);
bt = csa->bt_header + (block % csa->hdr->bt_buckets);
assert(bt->blk == BT_QUEHEAD);
for (lcnt = csa->hdr->n_bts; lcnt > 0; lcnt--)
{
bt = (bt_rec_ptr_t)((sm_uc_ptr_t) bt + bt->blkque.fl);
if (bt->blk == block)
return bt;
if (bt->blk == BT_QUEHEAD)
return NULL;
}
SET_TRACEABLE_VAR(csa->nl->wc_blocked, WC_BLOCK_RECOVER);
BG_TRACE_PRO_ANY(csa, wc_blocked_bt_get);
return NULL; /* actually should return BT_INVALID or some such value but callers check only for NULL */
}
|