It won't go in cleanly any more:
patching file stacks.c Hunk #1 FAILED at 108. Hunk #2 FAILED at 153. Hunk #3 succeeded at 227 (offset 46 lines). Hunk #4 succeeded at 243 with fuzz 1 (offset 46 lines). 2 out of 4 hunks FAILED -- saving rejects to file stacks.c.rej If you can submit a patch against the current code, i'll apply it as long as it doesn't break anything and you think it's a good thing :) --Josh At 18:30 on 03/29/2002 EST, Michel J Lambert <[EMAIL PROTECTED]> wrote: > The following was applied by Dan, but from what I can tell, seems to have > become unapplied since. > > Mike Lambert > > Bryan C. Warnock wrote: > > > Date: Fri, 22 Mar 2002 01:47:02 -0500 > > From: Bryan C. Warnock <[EMAIL PROTECTED]> > > To: [EMAIL PROTECTED] > > Subject: [PATCH] stacks.c > > > > Defer allocation as long as possible. Make logic parallel. > > > > Index: stacks.c > > =================================================================== > > RCS file: /home/perlcvs/parrot/stacks.c,v > > retrieving revision 1.23 > > diff -u -r1.23 stacks.c > > --- stacks.c 8 Mar 2002 03:04:03 -0000 1.23 > > +++ stacks.c 22 Mar 2002 06:45:39 -0000 > > @@ -108,7 +108,21 @@ > > void *thing, INTVAL type, stack_cleanup_method_t cleanup) > > { > > Stack_Chunk chunk = stack->prev; > > - Stack_Entry entry = &chunk->entry[chunk->used]; > > + Stack_Entry entry; > > + > > + /* Do we need a new chunk? */ > > + if (chunk->used == STACK_CHUNK_DEPTH) { > > + /* Need to add a new chunk */ > > + Stack_Chunk new_chunk = mem_allocate_aligned(sizeof(*new_chunk)); > > + new_chunk->used = 0; > > + new_chunk->next = stack; > > + new_chunk->prev = chunk; > > + chunk->next = new_chunk; > > + stack->prev = new_chunk; > > + chunk = new_chunk; > > + } > > + > > + entry = &chunk->entry[chunk->used]; > > > > /* Remember the type */ > > entry->entry_type = type; > > @@ -139,16 +153,7 @@ > > break; > > } > > > > - /* Register the new entry */ > > - if (++chunk->used == STACK_CHUNK_DEPTH) { > > - /* Need to add a new chunk */ > > - Stack_Chunk new_chunk = mem_allocate_aligned(sizeof(*new_chunk)); > > - new_chunk->used = 0; > > - new_chunk->next = stack; > > - new_chunk->prev = chunk; > > - chunk->next = new_chunk; > > - stack->prev = new_chunk; > > - } > > + chunk->used++; > > } > > > > /* Pop off an entry and return a pointer to the contents */ > > @@ -176,7 +181,10 @@ > > internal_exception(ERROR_STACK_EMPTY, "No entries on stack!\n"); > > } > > > > - entry = &chunk->entry[chunk->used - 1]; > > + /* Now decrement the SP */ > > + chunk->used--; > > + > > + entry = &chunk->entry[chunk->used]; > > > > /* Types of 0 mean we don't care */ > > if (type && entry->entry_type != type) { > > @@ -189,8 +197,6 @@ > > (*entry->cleanup) (entry); > > } > > > > - /* Now decrement the SP */ > > - chunk->used--; > > > > /* Sometimes the caller doesn't care what the value was */ > > if (where == NULL) > > -- > > Bryan C. Warnock > > [EMAIL PROTECTED] > > > > >