On Fri, 21 Apr 2006, Andy Dougherty wrote:

> On Fri, 21 Apr 2006, Will Coleda wrote:
> 
> > OSX 10.4.6, PPC
> > 
> > This failure has been pretty persistent the past few weeks:
> > 
> > t/src/hash.t        1   256    11    1   9.09%  6
> > 
> > #          got: '42
> > # hash_6(4373,0xa000ed98) malloc: *** error for object 0x1d14140:  
> > incorrect checksum for freed object - object was probably modified  
> > after being freed, break at szone_error to debug
> > # hash_6(4373,0xa000ed98) malloc: *** set a breakpoint in szone_error  
> > to debug
> > # hash_6(4373,0xa000ed98) malloc: *** error for object 0x1d14140:  
> > incorrect checksum for freed object - object was probably modified  
> > after being freed, break at szone_error to debug
> > # hash_6(4373,0xa000ed98) malloc: *** set a breakpoint in szone_error  
> > to debug
> > # '
> > #     expected: '42
> 
> That test has been dumping core for me (Solaris 8/SPARC) for quite a long 
> time (since last summer at least, I think).  I tried to see if it's still 
> there in the current code, but my build & test script aborted at the 
> Configure.pl stage (due to the changed perl version requirements).

This test still core dumps for me.  I've traced it down a good bit -- it's 
a garbage collection problem.

Specifically, in t/src/hash_6.c, the variable 'hash' is declared in
the function 'the_test', and memory allocated with 
    hash = PMC_struct_val(h);
A big string 'big' is then created.  The program then calls
string_from_cstring().  The ensuing sequence is something like (This is
all from printf() statements -- the debugger gets confused, as do I!):

string_from_cstring() -> string_make_direct() ->
Parrot_allocate_string() -> mem_allocate() -> Parrot_dod_ms_run() ->
Parrot_forall_header_pools() -> sweep_cb() -> 
Parrot_dod_sweep() ...  ??? ... mem_sys_free() -> free(from)

where from == hash.  (At the ??? point, I lose track of what's happening)

Not surprisingly, the program crashes later on at 

    hash_put(interpreter, hash, key, i);

Unfortunately, this failure is in the dod_sweep() stuff, which I
really don't understand at all, so I don't know how to proceed from
here.

-- 
    Andy Dougherty              [EMAIL PROTECTED]

Reply via email to