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

bacek at svn.parrot.org bacek at svn.parrot.org
Thu May 6 14:00:58 UTC 2010


Author: bacek
Date: Thu May  6 14:00:57 2010
New Revision: 46353
URL: https://trac.parrot.org/parrot/changeset/46353

Log:
Replace "ifs" with asserts in gc_ms_reallocate_string_storage to enforce "immutable stirngs contract".

Modified:
   trunk/src/gc/gc_ms.c

Modified: trunk/src/gc/gc_ms.c
==============================================================================
--- trunk/src/gc/gc_ms.c	Thu May  6 13:43:51 2010	(r46352)
+++ trunk/src/gc/gc_ms.c	Thu May  6 14:00:57 2010	(r46353)
@@ -1252,19 +1252,15 @@
     mem += sizeof (void *);
 
     /* Update Memory_Block usage */
-    if (PObj_is_movable_TESTALL(str)) {
-        INTVAL *buffer_flags = Buffer_bufrefcountptr(str);
+    /* We must not reallocate non-movable buffers! */
+    PARROT_ASSERT(PObj_is_movable_TESTALL(str));
 
-        /* Mask low 2 bits used for flags */
-        Memory_Block * block = Buffer_pool(str);
+    /* We must not reallocate shared buffers! */
+    PARROT_ASSERT(!(*Buffer_bufrefcountptr(str) & Buffer_shared_FLAG));
 
-        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));
-        }
-    }
+    /* Decrease usage */
+    PARROT_ASSERT(Buffer_pool(str));
+    Buffer_pool(str)->freed  += ALIGNED_STRING_SIZE(Buffer_buflen(str));
 
     /* copy mem from strstart, *not* bufstart */
     oldmem             = str->strstart;


More information about the parrot-commits mailing list