2012-02-05 11:35:58 -05:00
|
|
|
/****************************************************************
|
|
|
|
* *
|
|
|
|
* 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 "objlabel.h"
|
|
|
|
#include "cache.h"
|
|
|
|
#include "hashtab_objcode.h"
|
2012-10-29 18:54:31 -04:00
|
|
|
#include <rtnhdr.h>
|
2012-02-05 11:35:58 -05:00
|
|
|
#include "stack_frame.h"
|
|
|
|
#include "cache_cleanup.h"
|
|
|
|
|
|
|
|
GBLREF hash_table_objcode cache_table;
|
|
|
|
GBLREF int indir_cache_mem_size;
|
|
|
|
|
|
|
|
void cache_cleanup(stack_frame *sf)
|
|
|
|
{
|
|
|
|
ihdtyp *irtnhdr;
|
|
|
|
cache_entry *csp;
|
|
|
|
INTPTR_T *vp;
|
|
|
|
boolean_t deleted;
|
|
|
|
|
|
|
|
assert(sf->ctxt);
|
|
|
|
vp = (INTPTR_T *)sf->ctxt;
|
|
|
|
vp--;
|
|
|
|
if ((GTM_OMAGIC << 16) + OBJ_LABEL == *vp) /* Validate backward linkage */
|
|
|
|
{ /* Frame is one of ours */
|
|
|
|
vp--;
|
|
|
|
irtnhdr = (ihdtyp *)((char *)vp + *vp);
|
|
|
|
csp = irtnhdr->indce;
|
|
|
|
assert(NULL != csp);
|
|
|
|
assert(0 < csp->refcnt);
|
|
|
|
csp->refcnt--; /* This usage of this cache entry is done */
|
|
|
|
/* We want to keep the entry around with the hope that it will be accessed again.
|
|
|
|
* When we keep too many entries or entries are using too much memory cache_put will call cache_table_rebuild()
|
|
|
|
* to make space removing elements with csp->refcnt == 0 and csp->zb_refcnt == 0
|
|
|
|
*/
|
|
|
|
} else
|
|
|
|
GTMASSERT; /* Not sure when this could happen */
|
|
|
|
}
|