ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/Coro/State.xs
(Generate patch)

Comparing Coro/Coro/State.xs (file contents):
Revision 1.90 by root, Sat Nov 25 00:56:35 2006 UTC vs.
Revision 1.91 by root, Sat Nov 25 01:14:11 2006 UTC

588 dTHX; 588 dTHX;
589 589
590 transfer_tail (); 590 transfer_tail ();
591 591
592 PL_top_env = &PL_start_env; 592 PL_top_env = &PL_start_env;
593 PL_restartop = PL_op->op_next; 593 PL_restartop = PL_op;
594 /* somebody will hit me for both perl_run and PL_restart_top */ 594 /* somebody will hit me for both perl_run and PL_restart_top */
595 perl_run (aTHX_ PERL_GET_CONTEXT); 595 perl_run (aTHX_ PERL_GET_CONTEXT);
596 596
597 abort (); 597 abort ();
598} 598}
650 Safefree (stack); 650 Safefree (stack);
651} 651}
652 652
653static coro_stack *stack_first; 653static coro_stack *stack_first;
654 654
655static void 655static coro_stack *
656stack_get (struct coro *coro) 656stack_get ()
657{ 657{
658 coro_stack *stack;
659
658 if (stack_first) 660 if (stack_first)
659 { 661 {
660 coro->stack = stack_first; 662 stack = stack_first;
661 stack_first = stack_first->next; 663 stack_first = stack->next;
662 } 664 }
663 else 665 else
666 {
664 coro->stack = stack_new (); 667 stack = stack_new ();
668 PL_op = PL_op->op_next;
669 }
670
671 return stack;
665} 672}
666 673
667static void 674static void
668stack_put (coro_stack *stack) 675stack_put (coro_stack *stack)
669{ 676{
686 if (prev != next) 693 if (prev != next)
687 { 694 {
688 coro_stack *prev_stack = prev->stack; 695 coro_stack *prev_stack = prev->stack;
689 696
690 /* possibly "free" the stack */ 697 /* possibly "free" the stack */
691 if (prev_stack->idle_sp == stacklevel) 698 if (0 && prev_stack->idle_sp == stacklevel)
692 { 699 {
693 stack_put (prev_stack); 700 stack_put (prev_stack);
694 prev->stack = 0; 701 prev->stack = 0;
695 } 702 }
696 703
710 /* need to change stack from main_stack to real one */ 717 /* need to change stack from main_stack to real one */
711 next->stack = 0; 718 next->stack = 0;
712 } 719 }
713 720
714 if (!next->stack) 721 if (!next->stack)
715 stack_get (next); 722 next->stack = stack_get ();
716 723
717 if (prev_stack != next->stack) 724 if (prev_stack != next->stack)
718 coro_transfer (&prev_stack->cctx, &next->stack->cctx); 725 coro_transfer (&prev_stack->cctx, &next->stack->cctx);
719 } 726 }
720 727

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines