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

bacek at svn.parrot.org bacek at svn.parrot.org
Mon Feb 15 10:59:39 UTC 2010


Author: bacek
Date: Mon Feb 15 10:59:39 2010
New Revision: 43966
URL: https://trac.parrot.org/parrot/changeset/43966

Log:
Remove aligned_size. Always use aligned_string_size for buffers to avoid crashes in compact_pool

Modified:
   trunk/src/gc/alloc_resources.c
   trunk/src/gc/gc_ms.c
   trunk/src/gc/gc_private.h

Modified: trunk/src/gc/alloc_resources.c
==============================================================================
--- trunk/src/gc/alloc_resources.c	Mon Feb 15 10:38:43 2010	(r43965)
+++ trunk/src/gc/alloc_resources.c	Mon Feb 15 10:59:39 2010	(r43966)
@@ -627,33 +627,6 @@
 
 /*
 
-=item C<size_t aligned_size(const Buffer *buffer, size_t len)>
-
-Determines the size of Buffer C<buffer> which has nominal length C<len>.
-The actual size in RAM of the Buffer might be different because of
-alignment issues.
-
-=cut
-
-*/
-
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-size_t
-aligned_size(ARGIN(const Buffer *buffer), size_t len)
-{
-    ASSERT_ARGS(aligned_size)
-    if (PObj_is_COWable_TEST(buffer))
-        len += sizeof (void*);
-    if (PObj_aligned_TEST(buffer))
-        len = (len + BUFFER_ALIGN_1) & BUFFER_ALIGN_MASK;
-    else
-        len = (len + WORD_ALIGN_1) & WORD_ALIGN_MASK;
-    return len;
-}
-
-/*
-
 =item C<char * aligned_mem(const Buffer *buffer, char *mem)>
 
 Returns a pointer to the aligned allocated storage for Buffer C<buffer>,

Modified: trunk/src/gc/gc_ms.c
==============================================================================
--- trunk/src/gc/gc_ms.c	Mon Feb 15 10:38:43 2010	(r43965)
+++ trunk/src/gc/gc_ms.c	Mon Feb 15 10:59:39 2010	(r43966)
@@ -803,13 +803,12 @@
 
     Buffer_buflen(buffer) = 0;
     Buffer_bufstart(buffer) = NULL;
-    new_size = aligned_size(buffer, size);
+    new_size = aligned_string_size(size);
     mem = (char *)mem_allocate(interp, interp->mem_pools, new_size,
         interp->mem_pools->memory_pool);
     mem = aligned_mem(buffer, mem);
     Buffer_bufstart(buffer) = mem;
-    if (PObj_is_COWable_TEST(buffer))
-        new_size -= sizeof (void*);
+    new_size -= sizeof (void*);
     Buffer_buflen(buffer) = new_size;
 }
 
@@ -852,8 +851,8 @@
      * normally, which play ping pong with buffers.
      * The normal case is therefore always to allocate a new block
      */
-    new_size = aligned_size(buffer, newsize);
-    old_size = aligned_size(buffer, Buffer_buflen(buffer));
+    new_size = aligned_string_size(newsize);
+    old_size = aligned_string_size(Buffer_buflen(buffer));
     needed   = new_size - old_size;
 
     if ((pool->top_block->free >= needed)
@@ -881,8 +880,7 @@
 
     Buffer_bufstart(buffer) = mem;
 
-    if (PObj_is_COWable_TEST(buffer))
-        new_size -= sizeof (void *);
+    new_size -= sizeof (void *);
 
     Buffer_buflen(buffer) = new_size;
 }

Modified: trunk/src/gc/gc_private.h
==============================================================================
--- trunk/src/gc/gc_private.h	Mon Feb 15 10:38:43 2010	(r43965)
+++ trunk/src/gc/gc_private.h	Mon Feb 15 10:59:39 2010	(r43966)
@@ -487,11 +487,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-PARROT_PURE_FUNCTION
-PARROT_WARN_UNUSED_RESULT
-size_t aligned_size(ARGIN(const Buffer *buffer), size_t len)
-        __attribute__nonnull__(1);
-
 PARROT_CONST_FUNCTION
 PARROT_WARN_UNUSED_RESULT
 size_t aligned_string_size(size_t len);
@@ -558,8 +553,6 @@
 #define ASSERT_ARGS_aligned_mem __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(buffer) \
     , PARROT_ASSERT_ARG(mem))
-#define ASSERT_ARGS_aligned_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(buffer))
 #define ASSERT_ARGS_aligned_string_size __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_check_buffer_ptr __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(pobj) \


More information about the parrot-commits mailing list