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.369 by root, Thu Aug 13 02:48:32 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 */
2918#endif 2917#endif
2919 2918
2920/*****************************************************************************/ 2919/*****************************************************************************/
2921 2920
2922static SV * 2921static SV *
2923coro_new (HV *stash, SV **argv, int argc, int is_coro) 2922coro_new (pTHX_ HV *stash, SV **argv, int argc, int is_coro)
2924{ 2923{
2925 SV *coro_sv; 2924 SV *coro_sv;
2926 struct coro *coro; 2925 struct coro *coro;
2927 MAGIC *mg; 2926 MAGIC *mg;
2928 HV *hv; 2927 HV *hv;
3054SV * 3053SV *
3055new (SV *klass, ...) 3054new (SV *klass, ...)
3056 ALIAS: 3055 ALIAS:
3057 Coro::new = 1 3056 Coro::new = 1
3058 CODE: 3057 CODE:
3059 RETVAL = coro_new (ix ? coro_stash : coro_state_stash, &ST (1), items - 1, ix); 3058 RETVAL = coro_new (aTHX_ ix ? coro_stash : coro_state_stash, &ST (1), items - 1, ix);
3060 OUTPUT: 3059 OUTPUT:
3061 RETVAL 3060 RETVAL
3062 3061
3063void 3062void
3064transfer (...) 3063transfer (...)
3332 sv_idle = coro_get_sv (aTHX_ "Coro::idle" , TRUE); 3331 sv_idle = coro_get_sv (aTHX_ "Coro::idle" , TRUE);
3333 3332
3334 sv_async_pool_idle = newSVpv ("[async pool idle]", 0); SvREADONLY_on (sv_async_pool_idle); 3333 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); 3334 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); 3335 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);
3338 3336
3339 coro_stash = gv_stashpv ("Coro", TRUE); 3337 coro_stash = gv_stashpv ("Coro", TRUE);
3340 3338
3341 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (CORO_PRIO_MAX)); 3339 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (CORO_PRIO_MAX));
3342 newCONSTSUB (coro_stash, "PRIO_HIGH", newSViv (CORO_PRIO_HIGH)); 3340 newCONSTSUB (coro_stash, "PRIO_HIGH", newSViv (CORO_PRIO_HIGH));
3365 3363
3366SV * 3364SV *
3367async (...) 3365async (...)
3368 PROTOTYPE: &@ 3366 PROTOTYPE: &@
3369 CODE: 3367 CODE:
3370 RETVAL = coro_new (coro_stash, &ST (0), items, 1); 3368 RETVAL = coro_new (aTHX_ coro_stash, &ST (0), items, 1);
3371 api_ready (RETVAL); 3369 api_ready (RETVAL);
3372 OUTPUT: 3370 OUTPUT:
3373 RETVAL 3371 RETVAL
3374 3372
3375void 3373void
3496 for (i = 1; i < items; ++i) 3494 for (i = 1; i < items; ++i)
3497 av_push (av, SvREFCNT_inc_NN (ST (i))); 3495 av_push (av, SvREFCNT_inc_NN (ST (i)));
3498 3496
3499 if ((SV *)hv == &PL_sv_undef) 3497 if ((SV *)hv == &PL_sv_undef)
3500 { 3498 {
3501 PUSHMARK (SP); 3499 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)); 3500 hv = (HV *)SvREFCNT_inc_NN (SvRV (sv));
3501 SvREFCNT_dec (sv);
3510 } 3502 }
3511 3503
3512 { 3504 {
3513 struct coro *coro = SvSTATE_hv (hv); 3505 struct coro *coro = SvSTATE_hv (hv);
3514 3506

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines