55 lines
1.6 KiB
C
55 lines
1.6 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. *
|
|
* *
|
|
****************************************************************/
|
|
|
|
#include "mdef.h"
|
|
|
|
#include "gtm_string.h"
|
|
#include "gtm_stdio.h"
|
|
#include "io.h"
|
|
#include "min_max.h"
|
|
#include "cache.h"
|
|
#include "hashtab_objcode.h"
|
|
#include "cachectl.h"
|
|
#include "gtm_text_alloc.h"
|
|
#include "error.h"
|
|
|
|
GBLREF hash_table_objcode cache_table;
|
|
GBLREF int indir_cache_mem_size;
|
|
|
|
error_def(ERR_MEMORY);
|
|
error_def(ERR_VMSMEMORY);
|
|
|
|
void cache_table_rebuild()
|
|
{
|
|
ht_ent_objcode *tabent, *topent;
|
|
cache_entry *csp;
|
|
|
|
DBGCACHE((stdout, "cache_table_rebuild: Rebuilding indirect lookaside cache\n"));
|
|
for (tabent = cache_table.base, topent = cache_table.top; tabent < topent; tabent++)
|
|
{
|
|
if (HTENT_VALID_OBJCODE(tabent, cache_entry, csp))
|
|
{
|
|
if ((0 == csp->refcnt) && (0 == csp->zb_refcnt))
|
|
{
|
|
((ihdtyp *)(csp->obj.addr))->indce = NULL;
|
|
indir_cache_mem_size -= (ICACHE_SIZE + csp->obj.len);
|
|
GTM_TEXT_FREE(csp);
|
|
delete_hashtab_ent_objcode(&cache_table, tabent);
|
|
}
|
|
}
|
|
}
|
|
/* Only do compaction processing if we are not processing a memory type error (which
|
|
* involves allocating a smaller table with storage we don't have.
|
|
*/
|
|
if (COMPACT_NEEDED(&cache_table) && error_condition != UNIX_ONLY(ERR_MEMORY) VMS_ONLY(ERR_VMSMEMORY))
|
|
compact_hashtab_objcode(&cache_table);
|
|
}
|