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.325 by root, Sun Nov 23 06:48:45 2008 UTC vs.
Revision 1.326 by root, Mon Nov 24 04:56:38 2008 UTC

175static HV *coro_state_stash, *coro_stash; 175static HV *coro_state_stash, *coro_stash;
176static volatile SV *coro_mortal; /* will be freed/thrown after next transfer */ 176static volatile SV *coro_mortal; /* will be freed/thrown after next transfer */
177 177
178static AV *av_destroy; /* destruction queue */ 178static AV *av_destroy; /* destruction queue */
179static SV *sv_manager; /* the manager coro */ 179static SV *sv_manager; /* the manager coro */
180static SV *sv_idle; /* $Coro::idle */
180 181
181static GV *irsgv; /* $/ */ 182static GV *irsgv; /* $/ */
182static GV *stdoutgv; /* *STDOUT */ 183static GV *stdoutgv; /* *STDOUT */
183static SV *rv_diehook; 184static SV *rv_diehook;
184static SV *rv_warnhook; 185static SV *rv_warnhook;
1582{ 1583{
1583 struct coro *coro; 1584 struct coro *coro;
1584 SV *sv_hook; 1585 SV *sv_hook;
1585 void (*xs_hook)(void); 1586 void (*xs_hook)(void);
1586 1587
1587 if (SvROK (coro_sv))
1588 coro_sv = SvRV (coro_sv);
1589
1590 coro = SvSTATE (coro_sv); 1588 coro = SvSTATE (coro_sv);
1591 1589
1592 if (coro->flags & CF_READY) 1590 if (coro->flags & CF_READY)
1593 return 0; 1591 return 0;
1594 1592
1668 } 1666 }
1669 } 1667 }
1670 else 1668 else
1671 { 1669 {
1672 /* nothing to schedule: call the idle handler */ 1670 /* nothing to schedule: call the idle handler */
1671 if (SvROK (sv_idle)
1672 && SvOBJECT (SvRV (sv_idle)))
1673 {
1674 ++coro_nready; /* hack so that api_ready doesn't invoke ready hook */
1675 api_ready (SvRV (sv_idle));
1676 --coro_nready;
1677 }
1678 else
1679 {
1673 dSP; 1680 dSP;
1674 1681
1675 ENTER; 1682 ENTER;
1676 SAVETMPS; 1683 SAVETMPS;
1677 1684
1678 PUSHMARK (SP); 1685 PUSHMARK (SP);
1679 PUTBACK; 1686 PUTBACK;
1680 call_sv (get_sv ("Coro::idle", FALSE), G_VOID | G_DISCARD); 1687 call_sv (sv_idle, G_VOID | G_DISCARD);
1681 1688
1682 FREETMPS; 1689 FREETMPS;
1683 LEAVE; 1690 LEAVE;
1691 }
1684 } 1692 }
1685 } 1693 }
1686} 1694}
1687 1695
1688INLINE void 1696INLINE void
3098 cv_coro_terminate = get_cv ( "Coro::terminate" , GV_ADD); 3106 cv_coro_terminate = get_cv ( "Coro::terminate" , GV_ADD);
3099 coro_current = coro_get_sv (aTHX_ "Coro::current" , FALSE); SvREADONLY_on (coro_current); 3107 coro_current = coro_get_sv (aTHX_ "Coro::current" , FALSE); SvREADONLY_on (coro_current);
3100 av_async_pool = coro_get_av (aTHX_ "Coro::async_pool", TRUE); 3108 av_async_pool = coro_get_av (aTHX_ "Coro::async_pool", TRUE);
3101 av_destroy = coro_get_av (aTHX_ "Coro::destroy" , TRUE); 3109 av_destroy = coro_get_av (aTHX_ "Coro::destroy" , TRUE);
3102 sv_manager = coro_get_sv (aTHX_ "Coro::manager" , TRUE); 3110 sv_manager = coro_get_sv (aTHX_ "Coro::manager" , TRUE);
3111 sv_idle = coro_get_sv (aTHX_ "Coro::idle" , TRUE);
3103 3112
3104 sv_async_pool_idle = newSVpv ("[async pool idle]", 0); SvREADONLY_on (sv_async_pool_idle); 3113 sv_async_pool_idle = newSVpv ("[async pool idle]", 0); SvREADONLY_on (sv_async_pool_idle);
3105 sv_Coro = newSVpv ("Coro", 0); SvREADONLY_on (sv_Coro); 3114 sv_Coro = newSVpv ("Coro", 0); SvREADONLY_on (sv_Coro);
3106 cv_pool_handler = get_cv ("Coro::pool_handler", GV_ADD); SvREADONLY_on (cv_pool_handler); 3115 cv_pool_handler = get_cv ("Coro::pool_handler", GV_ADD); SvREADONLY_on (cv_pool_handler);
3107 cv_coro_state_new = get_cv ("Coro::State::new", 0); SvREADONLY_on (cv_coro_state_new); 3116 cv_coro_state_new = get_cv ("Coro::State::new", 0); SvREADONLY_on (cv_coro_state_new);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines