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.26 by root, Fri Aug 17 01:45:39 2001 UTC vs.
Revision 1.27 by root, Mon Aug 20 16:58:19 2001 UTC

195 195
196 return newpadlist; 196 return newpadlist;
197} 197}
198 198
199#ifdef MAY_FLUSH 199#ifdef MAY_FLUSH
200STATIC AV * 200STATIC void
201free_padlist (AV *padlist) 201free_padlist (AV *padlist)
202{ 202{
203 /* may be during global destruction */ 203 /* may be during global destruction */
204 if (SvREFCNT(padlist)) 204 if (SvREFCNT(padlist))
205 { 205 {
754 } 754 }
755 755
756 /* must also be changed inside Coro::Cont::yield */ 756 /* must also be changed inside Coro::Cont::yield */
757 if (SvROK(arg) && SvSTASH(SvRV(arg)) == coro_state_stash) 757 if (SvROK(arg) && SvSTASH(SvRV(arg)) == coro_state_stash)
758 return (struct coro *) SvIV((SV*)SvRV(arg)); 758 return (struct coro *) SvIV((SV*)SvRV(arg));
759 else 759
760 croak ("%s() -- %s is not (and contains not) a Coro::State object", funcname, varname); 760 croak ("%s() -- %s is not (and contains not) a Coro::State object", funcname, varname);
761 /*NORETURN*/
761} 762}
762 763
763static void 764static void
764api_transfer(pTHX_ SV *prev, SV *next, int flags) 765api_transfer(pTHX_ SV *prev, SV *next, int flags)
765{ 766{
767 transfer(aTHX_
766 transfer(aTHX_ sv_to_coro (prev, "Coro::transfer", "prev"), 768 sv_to_coro (prev, "Coro::transfer", "prev"),
767 sv_to_coro (next, "Coro::transfer", "next"), 769 sv_to_coro (next, "Coro::transfer", "next"),
768 flags); 770 flags);
769} 771}
770 772
771/** Coro ********************************************************************/ 773/** Coro ********************************************************************/
772 774
773#define PRIO_MAX 3 775#define PRIO_MAX 3
846 848
847 if (!next) 849 if (!next)
848 next = SvREFCNT_inc (GvSV (coro_idle)); 850 next = SvREFCNT_inc (GvSV (coro_idle));
849 851
850 GvSV (coro_current) = SvREFCNT_inc (next); 852 GvSV (coro_current) = SvREFCNT_inc (next);
853 transfer (aTHX_
851 transfer (sv_to_coro (prev, "Coro::schedule", "current coroutine"), 854 sv_to_coro (prev, "Coro::schedule", "current coroutine"),
852 sv_to_coro (next, "Coro::schedule", "next coroutine"), 855 sv_to_coro (next, "Coro::schedule", "next coroutine"),
853 TRANSFER_SAVE_ALL | TRANSFER_LAZY_STACK); 856 TRANSFER_SAVE_ALL | TRANSFER_LAZY_STACK);
854 SvREFCNT_dec (next); 857 SvREFCNT_dec (next);
855 SvREFCNT_dec (prev); 858 SvREFCNT_dec (prev);
856} 859}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines