cvsuser 04/04/01 01:52:25
Modified: src hash.c pmc_freeze.c
Log:
fix freezing large hashes
Revision Changes Path
1.76 +9 -4 parrot/src/hash.c
Index: hash.c
===================================================================
RCS file: /cvs/public/parrot/src/hash.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -w -r1.75 -r1.76
--- hash.c 26 Mar 2004 18:30:31 -0000 1.75
+++ hash.c 1 Apr 2004 09:52:24 -0000 1.76
@@ -1,6 +1,6 @@
/*
Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
-$Id: hash.c,v 1.75 2004/03/26 18:30:31 leo Exp $
+$Id: hash.c,v 1.76 2004/04/01 09:52:24 leo Exp $
=head1 NAME
@@ -446,6 +446,7 @@
STRING *key;
IMAGE_IO *io = info->image_io;
HashBucket *b;
+ BucketIndex bi;
int freezing =
info->what == VISIT_FREEZE_NORMAL ||
info->what == VISIT_FREEZE_AT_DESTRUCT;
@@ -467,12 +468,16 @@
break;
default:
for (i = 0; i <= hash->max_chain; i++) {
- b = lookupBucket(hash, i);
- while (b) {
+ bi = lookupBucketIndex(hash, i);
+ while (bi != NULLBucketIndex) {
+ b = getBucket(hash, bi);
if (freezing)
io->vtable->push_string(interpreter, io, b->key);
+ /* must refetch bucket GC might have run */
+ b = getBucket(hash, bi);
(info->visit_pmc_now)(interpreter, b->value, info);
- b = getBucket(hash, b->next);
+ b = getBucket(hash, bi);
+ bi = b->next;
}
}
}
1.20 +4 -1 parrot/src/pmc_freeze.c
Index: pmc_freeze.c
===================================================================
RCS file: /cvs/public/parrot/src/pmc_freeze.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -w -r1.19 -r1.20
--- pmc_freeze.c 26 Mar 2004 19:09:45 -0000 1.19
+++ pmc_freeze.c 1 Apr 2004 09:52:24 -0000 1.20
@@ -1,6 +1,6 @@
/*
Copyright: 2001-2003 The Perl Foundation. All Rights Reserved.
-$Id: pmc_freeze.c,v 1.19 2004/03/26 19:09:45 leo Exp $
+$Id: pmc_freeze.c,v 1.20 2004/04/01 09:52:24 leo Exp $
=head1 NAME
@@ -326,6 +326,9 @@
Parrot_reallocate_string(interpreter, s, new_size);
assert(PObj_buflen(s) - used - len >= 15);
}
+#ifndef DISABLE_GC_DEBUG
+ Parrot_go_collect(interpreter);
+#endif
}
/*