On Monday 28 April 2008 10:41:27 Mark Glines wrote: > On Sun, 27 Apr 2008 17:24:53 -0700 > > chromatic <[EMAIL PROTECTED]> wrote: > > Here's another proposed patch for testing on various platforms. I'm > > trying to get rid of some dodgy casts (which likely don't help C++ > > and processors with stricter alignment than 32-bit x86). I'd also > > like to remove unnecessary members from a few structs. This is the > > next step. > > > > Are there any weird errors or unexpected crashes on anything more > > exotic than 32-bit x86 GNU/Linux? > > This seems to cause memory corruption on linux/amd64. Only two tests > fail, the rest pass, but those are failing pretty gloriously. See > attached log.
I had a similar problem on my 32-bit Linux system, until I added this part of the patch: === src/gc/smallobject.c ================================================================== --- src/gc/smallobject.c. (revision 27223) +++ src/gc/smallobject.c. (local) @@ -523,9 +517,9 @@ free_list_end = &dest->free_list; - while (*free_list_end) - free_list_end = (void **)*free_list_end; + free_list_end = &PMC_struct_val((PObj *)free_list_end); - - *free_list_end = source->free_list; + PMC_struct_val((PObj *)free_list_end) = source->free_list; - /* now append source arenas */ cur_arena = source->last_Arena; My backtrace was different, though. I was getting segfaults trying to walk the free list when the next pointer was flag values, not a pointer. If there's an error on 64-bit systems, I still suspect it's in there. -- c