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.368 by root, Thu Aug 13 02:35:41 2009 UTC vs.
Revision 1.373 by root, Thu Oct 1 23:51:33 2009 UTC

142static SV *sv_pool_size; 142static SV *sv_pool_size;
143static SV *sv_async_pool_idle; /* description string */ 143static SV *sv_async_pool_idle; /* description string */
144static AV *av_async_pool; /* idle pool */ 144static AV *av_async_pool; /* idle pool */
145static SV *sv_Coro; /* class string */ 145static SV *sv_Coro; /* class string */
146static CV *cv_pool_handler; 146static CV *cv_pool_handler;
147static CV *cv_coro_state_new;
148 147
149/* Coro::AnyEvent */ 148/* Coro::AnyEvent */
150static SV *sv_activity; 149static SV *sv_activity;
151 150
152/* enable processtime/realtime profiling */ 151/* enable processtime/realtime profiling */
290static OP *(*coro_old_pp_sselect) (pTHX); 289static OP *(*coro_old_pp_sselect) (pTHX);
291static SV *coro_select_select; 290static SV *coro_select_select;
292 291
293/* horrible hack, but if it works... */ 292/* horrible hack, but if it works... */
294static OP * 293static OP *
295coro_pp_sselect (aTHX) 294coro_pp_sselect (pTHX)
296{ 295{
297 dSP; 296 dSP;
298 PUSHMARK (SP - 4); /* fake argument list */ 297 PUSHMARK (SP - 4); /* fake argument list */
299 XPUSHs (coro_select_select); 298 XPUSHs (coro_select_select);
300 PUTBACK; 299 PUTBACK;
1761 api_ready (aTHX_ SvRV (sv_idle)); 1760 api_ready (aTHX_ SvRV (sv_idle));
1762 --coro_nready; 1761 --coro_nready;
1763 } 1762 }
1764 else 1763 else
1765 { 1764 {
1765 /* TODO: deprecated, remove, cannot work reliably *//*D*/
1766 dSP; 1766 dSP;
1767 1767
1768 ENTER; 1768 ENTER;
1769 SAVETMPS; 1769 SAVETMPS;
1770 1770
2918#endif 2918#endif
2919 2919
2920/*****************************************************************************/ 2920/*****************************************************************************/
2921 2921
2922static SV * 2922static SV *
2923coro_new (HV *stash, SV **argv, int argc, int is_coro) 2923coro_new (pTHX_ HV *stash, SV **argv, int argc, int is_coro)
2924{ 2924{
2925 SV *coro_sv; 2925 SV *coro_sv;
2926 struct coro *coro; 2926 struct coro *coro;
2927 MAGIC *mg; 2927 MAGIC *mg;
2928 HV *hv; 2928 HV *hv;
3054SV * 3054SV *
3055new (SV *klass, ...) 3055new (SV *klass, ...)
3056 ALIAS: 3056 ALIAS:
3057 Coro::new = 1 3057 Coro::new = 1
3058 CODE: 3058 CODE:
3059 RETVAL = coro_new (ix ? coro_stash : coro_state_stash, &ST (1), items - 1, ix); 3059 RETVAL = coro_new (aTHX_ ix ? coro_stash : coro_state_stash, &ST (1), items - 1, ix);
3060 OUTPUT: 3060 OUTPUT:
3061 RETVAL 3061 RETVAL
3062 3062
3063void 3063void
3064transfer (...) 3064transfer (...)
3332 sv_idle = coro_get_sv (aTHX_ "Coro::idle" , TRUE); 3332 sv_idle = coro_get_sv (aTHX_ "Coro::idle" , TRUE);
3333 3333
3334 sv_async_pool_idle = newSVpv ("[async pool idle]", 0); SvREADONLY_on (sv_async_pool_idle); 3334 sv_async_pool_idle = newSVpv ("[async pool idle]", 0); SvREADONLY_on (sv_async_pool_idle);
3335 sv_Coro = newSVpv ("Coro", 0); SvREADONLY_on (sv_Coro); 3335 sv_Coro = newSVpv ("Coro", 0); SvREADONLY_on (sv_Coro);
3336 cv_pool_handler = get_cv ("Coro::pool_handler", GV_ADD); SvREADONLY_on (cv_pool_handler); 3336 cv_pool_handler = get_cv ("Coro::pool_handler", GV_ADD); SvREADONLY_on (cv_pool_handler);
3337 cv_coro_state_new = get_cv ("Coro::State::new", 0); SvREADONLY_on (cv_coro_state_new); 3337 CvNODEBUG_on (get_cv ("Coro::_pool_handler", 0)); /* work around a debugger bug */
3338 3338
3339 coro_stash = gv_stashpv ("Coro", TRUE); 3339 coro_stash = gv_stashpv ("Coro", TRUE);
3340 3340
3341 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (CORO_PRIO_MAX)); 3341 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (CORO_PRIO_MAX));
3342 newCONSTSUB (coro_stash, "PRIO_HIGH", newSViv (CORO_PRIO_HIGH)); 3342 newCONSTSUB (coro_stash, "PRIO_HIGH", newSViv (CORO_PRIO_HIGH));
3343 newCONSTSUB (coro_stash, "PRIO_NORMAL", newSViv (CORO_PRIO_NORMAL)); 3343 newCONSTSUB (coro_stash, "PRIO_NORMAL", newSViv (CORO_PRIO_NORMAL));
3365 3365
3366SV * 3366SV *
3367async (...) 3367async (...)
3368 PROTOTYPE: &@ 3368 PROTOTYPE: &@
3369 CODE: 3369 CODE:
3370 RETVAL = coro_new (coro_stash, &ST (0), items, 1); 3370 RETVAL = coro_new (aTHX_ coro_stash, &ST (0), items, 1);
3371 api_ready (RETVAL); 3371 api_ready (aTHX_ RETVAL);
3372 OUTPUT: 3372 OUTPUT:
3373 RETVAL 3373 RETVAL
3374 3374
3375void 3375void
3376terminate (...) 3376terminate (...)
3496 for (i = 1; i < items; ++i) 3496 for (i = 1; i < items; ++i)
3497 av_push (av, SvREFCNT_inc_NN (ST (i))); 3497 av_push (av, SvREFCNT_inc_NN (ST (i)));
3498 3498
3499 if ((SV *)hv == &PL_sv_undef) 3499 if ((SV *)hv == &PL_sv_undef)
3500 { 3500 {
3501 PUSHMARK (SP); 3501 SV *sv = coro_new (aTHX_ coro_stash, (SV **)&cv_pool_handler, 1, 1);
3502 EXTEND (SP, 2);
3503 PUSHs (sv_Coro);
3504 PUSHs ((SV *)cv_pool_handler);
3505 PUTBACK;
3506 call_sv ((SV *)cv_coro_state_new, G_SCALAR);
3507 SPAGAIN;
3508
3509 hv = (HV *)SvREFCNT_inc_NN (SvRV (POPs)); 3502 hv = (HV *)SvREFCNT_inc_NN (SvRV (sv));
3503 SvREFCNT_dec (sv);
3510 } 3504 }
3511 3505
3512 { 3506 {
3513 struct coro *coro = SvSTATE_hv (hv); 3507 struct coro *coro = SvSTATE_hv (hv);
3514 3508

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines