On Monday 21 April 2008 20:22:51 Seneca Cunningham wrote:

> parrot crashes while generating src/Grammar_gen.pir.  The last build
> attempted (on a different copy of the source tree) worked and was done
> right after the commits to get OpenGL working on OS X happened.  This
> happens with both "make -j2" and a plain "make".
>
> ../../parrot -o TGE/Tree.pbc --output-pbc TGE/Tree.pir
> ../../parrot -o ../../runtime/parrot/library/TGE.pbc --output-pbc TGE.pir
> make -C compilers/nqp
> ../../parrot 
> /opt/src/perl6/build-20080421-b/runtime/parrot/library/PGE/Perl6Grammar.pir
> \
>           --output=src/Grammar_gen.pir src/Grammar.pg
> make[1]: *** [nqp.pbc] Bus error
> make: *** [compilers.dummy] Error 2
> herodotus:build-20080421-b seneca$
>
> Program received signal EXC_BAD_ACCESS, Could not access memory.
> Reason: KERN_PROTECTION_FAILURE at address: 0x00000019
> 0x0069092c in pobject_lives (interp=0x1709de0, obj=0x11) at
> src/gc/dod.c:190 190      if (PObj_is_live_or_free_TESTALL(obj))
> (gdb) bt
> #0  0x0069092c in pobject_lives (interp=0x1709de0, obj=0x11) at
> src/gc/dod.c:190 #1  0x006e09dc in mark_stack (interp=0x1709de0,
> chunk=0x11) at src/stacks.c:66 #2  0x00850340 in Parrot_Continuation_mark
> (interp=0x1709de0,
> pmc=0x248f3e0) at continuation.pmc:89

chunk should never be 0x11.  Does this patch fix things for you?

If not, you might set a watchpoint on cc->dynamic_state to see when it gets 
set to 0x11, as that'll show where we have a pointer go awry.  (I fear that 
it may be one of the PMC_int_val( xxx )++ or -- bits in stack_push or 
stack_pop.)

-- c

=== src/pmc/continuation.pmc
==================================================================
--- src/pmc/continuation.pmc	(revision 27098)
+++ src/pmc/continuation.pmc	(local)
@@ -111,6 +111,10 @@
 #endif
             if (cc->from_ctx)
                 Parrot_free_context(interp, cc->from_ctx, 0);
+
+            if (cc->dynamic_state)
+                PMC_int_val((PObj *)cc->dynamic_state)--;
+
             mem_sys_free(cc);
             PMC_struct_val(SELF) = NULL;
         }
@@ -136,6 +140,8 @@
         PMC_struct_val(ret)  = cc;
         PMC_pmc_val(ret)     = PMC_pmc_val(SELF);
 
+        PMC_int_val((PObj *)cc->dynamic_state)++;
+
         return ret;
     }
 
@@ -174,6 +180,8 @@
         cc->dynamic_state = INTERP->dynamic_env;
         cc->runloop_id    = INTERP->current_runloop_id;
 
+        PMC_int_val((PObj *)cc->dynamic_state)++;
+
         if (pos && (*pos == PARROT_OP_get_results_pc))
             cc->current_results = pos;
         else

Reply via email to