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
   }
   
   /*
  
  
  

Reply via email to