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.374 by root, Fri Oct 2 19:55:59 2009 UTC vs.
Revision 1.377 by root, Sat Oct 3 17:55:04 2009 UTC

718 { 718 {
719 CV *cv = cx->blk_sub.cv; 719 CV *cv = cx->blk_sub.cv;
720 720
721 if (expect_true (CvDEPTH (cv))) 721 if (expect_true (CvDEPTH (cv)))
722 { 722 {
723 EXTEND (SP, 3);
723 PUSHs ((SV *)CvPADLIST (cv)); 724 PUSHs ((SV *)CvPADLIST (cv));
724 PUSHs (INT2PTR (SV *, (IV)CvDEPTH (cv))); 725 PUSHs (INT2PTR (SV *, (IV)CvDEPTH (cv)));
725 PUSHs ((SV *)cv); 726 PUSHs ((SV *)cv);
726 727
727 CvDEPTH (cv) = 0; 728 CvDEPTH (cv) = 0;
1135 1136
1136 SvREFCNT_dec (coro->saved_deffh); 1137 SvREFCNT_dec (coro->saved_deffh);
1137 SvREFCNT_dec (coro->rouse_cb); 1138 SvREFCNT_dec (coro->rouse_cb);
1138 SvREFCNT_dec (coro->invoke_cb); 1139 SvREFCNT_dec (coro->invoke_cb);
1139 SvREFCNT_dec (coro->invoke_av); 1140 SvREFCNT_dec (coro->invoke_av);
1140 SvREFCNT_dec (coro->swap_sv);
1141 } 1141 }
1142} 1142}
1143 1143
1144INLINE void 1144INLINE void
1145free_coro_mortal (pTHX) 1145free_coro_mortal (pTHX)
1636 && coro->mainstack != main_mainstack 1636 && coro->mainstack != main_mainstack
1637 && coro->slot 1637 && coro->slot
1638 && !PL_dirty) 1638 && !PL_dirty)
1639 destroy_perl (aTHX_ coro); 1639 destroy_perl (aTHX_ coro);
1640 1640
1641 if (coro->next) coro->next->prev = coro->prev;
1642 if (coro->prev) coro->prev->next = coro->next;
1643 if (coro == coro_first) coro_first = coro->next;
1644
1641 cctx_destroy (coro->cctx); 1645 cctx_destroy (coro->cctx);
1642 SvREFCNT_dec (coro->startcv); 1646 SvREFCNT_dec (coro->startcv);
1643 SvREFCNT_dec (coro->args); 1647 SvREFCNT_dec (coro->args);
1648 SvREFCNT_dec (coro->swap_sv);
1644 SvREFCNT_dec (CORO_THROW); 1649 SvREFCNT_dec (CORO_THROW);
1645
1646 if (coro->next) coro->next->prev = coro->prev;
1647 if (coro->prev) coro->prev->next = coro->next;
1648 if (coro == coro_first) coro_first = coro->next;
1649 1650
1650 return 1; 1651 return 1;
1651} 1652}
1652 1653
1653static int 1654static int
3396 SWAP_SVS (current); 3397 SWAP_SVS (current);
3397 3398
3398 if (!coro->swap_sv) 3399 if (!coro->swap_sv)
3399 coro->swap_sv = newAV (); 3400 coro->swap_sv = newAV ();
3400 3401
3401 av_push (coro->swap_sv, SvREFCNT_inc_NN (sv)); 3402 av_push (coro->swap_sv, SvREFCNT_inc_NN (SvRV (sv )));
3402 av_push (coro->swap_sv, SvREFCNT_inc_NN (swapsv)); 3403 av_push (coro->swap_sv, SvREFCNT_inc_NN (SvRV (swapsv)));
3403 3404
3404 if (current == coro) 3405 if (current == coro)
3405 SWAP_SVS (current); 3406 SWAP_SVS (current);
3406} 3407}
3407 3408

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines