cvsuser 04/12/07 06:42:06
Modified: src objects.c
Log:
invalidate method cache in store_global - free all
Revision Changes Path
1.126 +13 -3 parrot/src/objects.c
Index: objects.c
===================================================================
RCS file: /cvs/public/parrot/src/objects.c,v
retrieving revision 1.125
retrieving revision 1.126
diff -u -r1.125 -r1.126
--- objects.c 7 Dec 2004 14:19:12 -0000 1.125
+++ objects.c 7 Dec 2004 14:42:06 -0000 1.126
@@ -1,6 +1,6 @@
/*
Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
-$Id: objects.c,v 1.125 2004/12/07 14:19:12 leo Exp $
+$Id: objects.c,v 1.126 2004/12/07 14:42:06 leo Exp $
=head1 NAME
@@ -1077,16 +1077,28 @@
SET_NULL(mc->retc_cache);
}
+#define TBL_SIZE_MASK 0x1ff /* x bits 2..10 */
+#define TBL_SIZE (1 + TBL_SIZE_MASK)
+
static void
invalidate_type_caches(Interp *interpreter, UINTVAL type)
{
Caches *mc = interpreter->caches;
+ Meth_cache_entry *e, *next;
+ INTVAL i;
if (!mc)
return;
/* is it a valid entry */
if (type >= mc->mc_size || !mc->idx[type])
return;
+ for (i = 0; i < TBL_SIZE; ++i) {
+ for (e = mc->idx[type][i]; e; ) {
+ next = e->next;
+ mem_sys_free(e);
+ e = next;
+ }
+ }
mem_sys_free(mc->idx[type]);
mc->idx[type] = NULL;
}
@@ -1122,8 +1134,6 @@
invalidate_type_caches(interpreter, (UINTVAL)type);
}
-#define TBL_SIZE_MASK 0x1ff /* x bits 2..10 */
-#define TBL_SIZE (1 + TBL_SIZE_MASK)
/*
* quick'n'dirty method cache
* TODO: integrate NCI meth lookup