cvsuser     05/01/25 07:59:30

  Modified:    include/parrot headers.h
               src      headers.c smallobject.c
  Log:
  GMS generational MS 2 - pmc_ext is special
  
  Revision  Changes    Path
  1.25      +2 -1      parrot/include/parrot/headers.h
  
  Index: headers.h
  ===================================================================
  RCS file: /cvs/public/parrot/include/parrot/headers.h,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- headers.h 20 Jan 2005 14:48:23 -0000      1.24
  +++ headers.h 25 Jan 2005 15:59:29 -0000      1.25
  @@ -1,7 +1,7 @@
   /* headers.h
    *  Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
    *  CVS Info
  - *     $Id: headers.h,v 1.24 2005/01/20 14:48:23 leo Exp $
  + *     $Id: headers.h,v 1.25 2005/01/25 15:59:29 leo Exp $
    *  Overview:
    *     Header management functions. Handles getting of various headers,
    *     and pool creation
  @@ -46,6 +46,7 @@
   int is_buffer_ptr(Interp *, void *);
   int is_pmc_ptr(Interp *, void *);
   
  +void gc_pmc_ext_pool_init(Interp *, struct Small_Object_Pool *pool);
   
   /* pool iteration */
   typedef enum {
  
  
  
  1.65      +9 -7      parrot/src/headers.c
  
  Index: headers.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/headers.c,v
  retrieving revision 1.64
  retrieving revision 1.65
  diff -u -r1.64 -r1.65
  --- headers.c 25 Jan 2005 14:47:33 -0000      1.64
  +++ headers.c 25 Jan 2005 15:59:30 -0000      1.65
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
  -$Id: headers.c,v 1.64 2005/01/25 14:47:33 leo Exp $
  +$Id: headers.c,v 1.65 2005/01/25 15:59:30 leo Exp $
   
   =head1 NAME
   
  @@ -295,17 +295,13 @@
       struct Small_Object_Pool *pool = interpreter->arena_base->pmc_ext_pool;
       void *ptr;
       /*
  -     * can't use normall get_free_object--PMC_EXT doesn't have flags
  +     * can't use normal get_free_object--PMC_EXT doesn't have flags
        * it isn't a Buffer
        */
  -#if PARROT_GC_GMS
  -    ptr = pool->get_free_object(interpreter, pool);
  -#else
       if (!pool->free_list)
           (*pool->more_objects) (interpreter, pool);
       ptr = pool->free_list;
       pool->free_list = *(void **)ptr;
  -#endif
       memset(ptr, 0, sizeof(PMC_EXT));
       return ptr;
   }
  @@ -586,7 +582,13 @@
       /* pmc extension buffer */
       arena_base->pmc_ext_pool =
           new_small_object_pool(interpreter, sizeof(struct PMC_EXT), 1024);
  -    (arena_base->init_pool)(interpreter, arena_base->pmc_ext_pool);
  +    /*
  +     * pmc_ext isn't a managed item. If a PMC has a pmc_ext structure
  +     * it is returned to the pool instantly - the structure is never
  +     * marked.
  +     * Use GS MS pool functions
  +     */
  +    gc_pmc_ext_pool_init(interpreter, arena_base->pmc_ext_pool);
       arena_base->pmc_ext_pool->name = "pmc_ext";
   
       /* constant PMCs */
  
  
  
  1.55      +11 -3     parrot/src/smallobject.c
  
  Index: smallobject.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/smallobject.c,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- smallobject.c     18 Jan 2005 14:05:19 -0000      1.54
  +++ smallobject.c     25 Jan 2005 15:59:30 -0000      1.55
  @@ -1,6 +1,6 @@
   /*
   Copyright: 2001-2003 The Perl Foundation.  All Rights Reserved.
  -$Id: smallobject.c,v 1.54 2005/01/18 14:05:19 leo Exp $
  +$Id: smallobject.c,v 1.55 2005/01/25 15:59:30 leo Exp $
   
   =head1 NAME
   
  @@ -442,6 +442,7 @@
   
   */
   
  +
   struct Small_Object_Pool *
   new_small_object_pool(Interp *interpreter,
           size_t object_size, size_t objects_per_alloc)
  @@ -457,6 +458,15 @@
       return pool;
   }
   
  +void
  +gc_pmc_ext_pool_init(Interp *interpreter, struct Small_Object_Pool *pool)
  +{
  +    pool->add_free_object = gc_ms_add_free_object;
  +    pool->get_free_object = gc_ms_get_free_object;
  +    pool->alloc_objects   = gc_ms_alloc_objects;
  +    pool->more_objects    = gc_ms_alloc_objects;
  +}
  +
   static void
   gc_ms_pool_init(Interp *interpreter, struct Small_Object_Pool *pool)
   {
  @@ -468,8 +478,6 @@
       if (pool->object_size >= sizeof(Dead_PObj))
           pool->get_free_object = get_free_object_df;
   #endif
  -    if (pool == interpreter->arena_base->pmc_ext_pool)
  -        pool->more_objects = pool->alloc_objects;
   }
   
   /*
  
  
  

Reply via email to