cvsuser     04/04/27 02:55:18

  Modified:    src      dod.c smallobject.c
  Log:
  save some cycles during DOD
  
  Revision  Changes    Path
  1.112     +12 -1     parrot/src/dod.c
  
  Index: dod.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/dod.c,v
  retrieving revision 1.111
  retrieving revision 1.112
  diff -u -w -r1.111 -r1.112
  --- dod.c     23 Apr 2004 09:21:11 -0000      1.111
  +++ dod.c     27 Apr 2004 09:55:18 -0000      1.112
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
  -$Id: dod.c,v 1.111 2004/04/23 09:21:11 jrieks Exp $
  +$Id: dod.c,v 1.112 2004/04/27 09:55:18 leo Exp $
   
   =head1 NAME
   
  @@ -642,6 +642,17 @@
   #if REDUCE_ARENAS
       UINTVAL free_arenas = 0, old_total_used = 0;
   #endif
  +
  +    /*
  +     * A DOD run is triggered by any pool's resource shortage.
  +     * If one pool has plenty of free objects, we don't run through the
  +     * pool to free only some objects, except it's the pmc_pool
  +     * which might need timely destruction.
  +     */
  +    if (pool != interpreter->arena_base->pmc_pool &&
  +            pool->num_free_objects >
  +            pool->total_objects - pool->replenish_level)
  +        return;
   
       /* Run through all the buffer header pools and mark */
       for (cur_arena = pool->last_Arena;
  
  
  
  1.44      +4 -1      parrot/src/smallobject.c
  
  Index: smallobject.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/smallobject.c,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -w -r1.43 -r1.44
  --- smallobject.c     23 Apr 2004 09:21:12 -0000      1.43
  +++ smallobject.c     27 Apr 2004 09:55:18 -0000      1.44
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
  -$Id: smallobject.c,v 1.43 2004/04/23 09:21:12 jrieks Exp $
  +$Id: smallobject.c,v 1.44 2004/04/27 09:55:18 leo Exp $
   
   =head1 NAME
   
  @@ -177,6 +177,7 @@
       ptr = pool->free_list;
       pool->free_list = *(void **)ptr;
       PObj_on_free_list_CLEAR((PObj*) ptr);
  +    --pool->num_free_objects;
   #if ! DISABLE_GC_DEBUG
       if (GC_DEBUG(interpreter))
           PObj_version((Buffer*)ptr) = interpreter->dod_runs;
  @@ -196,6 +197,7 @@
           (*pool->more_objects) (interpreter, pool);
       ptr = pool->free_list;
       pool->free_list = *(void **)ptr;
  +    --pool->num_free_objects;
       *((Dead_PObj*)ptr)->arena_dod_flag_ptr &=
           ~ (PObj_on_free_list_FLAG << ((Dead_PObj*)ptr)->flag_shift);
       return ptr;
  @@ -268,6 +270,7 @@
           pool->add_free_object (interpreter, pool, object);
           object = (void *)((char *)object + pool->object_size);
       }
  +    pool->num_free_objects += end - start;
   #if ARENA_DOD_FLAGS
       /* set last */
       *dod_flags = ALL_FREE_MASK;
  
  
  

Reply via email to