[svn:parrot] r46351 - trunk/src/gc

bacek at svn.parrot.org bacek at svn.parrot.org
Thu May 6 13:36:47 UTC 2010


Author: bacek
Date: Thu May  6 13:36:47 2010
New Revision: 46351
URL: https://trac.parrot.org/parrot/changeset/46351

Log:
Update Memory_Block usage in gc_ms_reallocate_string_storage

Modified:
   trunk/src/gc/gc_ms.c

Modified: trunk/src/gc/gc_ms.c
==============================================================================
--- trunk/src/gc/gc_ms.c	Thu May  6 13:36:31 2010	(r46350)
+++ trunk/src/gc/gc_ms.c	Thu May  6 13:36:47 2010	(r46351)
@@ -1251,6 +1251,21 @@
     mem = (char *)mem_allocate(interp, interp->mem_pools, new_size, pool);
     mem += sizeof (void *);
 
+    /* Update Memory_Block usage */
+    if (PObj_is_movable_TESTALL(str)) {
+        INTVAL *buffer_flags = Buffer_bufrefcountptr(str);
+
+        /* Mask low 2 bits used for flags */
+        Memory_Block * block = Buffer_pool(str);
+
+        PARROT_ASSERT(block);
+
+        /* We can have shared buffers. Don't count them (yet) */
+        if (!(*buffer_flags & Buffer_shared_FLAG)) {
+            block->freed  += ALIGNED_STRING_SIZE(Buffer_buflen(str));
+        }
+    }
+
     /* copy mem from strstart, *not* bufstart */
     oldmem             = str->strstart;
     Buffer_bufstart(str) = (void *)mem;


More information about the parrot-commits mailing list