Future-AsyncAwait
view release on metacpan or search on metacpan
lib/Future/AsyncAwait.xs view on Meta::CPAN
/* If the Future implementation's ->AWAIT_ON_READY failed to capture this CV
* then we'll segfault later after SvREFCNT_dec() on it. We can at least
* detect that here
*/
if(SvREFCNT(curcv) < 2) {
croak("AWAIT_ON_READY failed to capture the CV");
}
state->awaiting_future = newSVsv(f);
sv_rvweaken(state->awaiting_future);
if(!state->returning_future) {
state->returning_future = future_new_from_proto(f);
if(precancel) {
I32 i;
for(i = 0; i < av_count(precancel); i++)
future_on_cancel(state->returning_future, AvARRAY(precancel)[i]);
AvFILLp(precancel) = -1;
}
lib/Future/AsyncAwait.xs view on Meta::CPAN
}
if(defer_mortal_curcv)
SvREFCNT_dec((SV *)curcv);
PUSHMARK(SP);
mPUSHs(newSVsv(state->returning_future));
PUTBACK;
if(!SvWEAKREF(state->returning_future))
sv_rvweaken(state->returning_future);
if(!SvROK(state->returning_future))
panic("ARGH we lost state->returning_future for curcv=%p\n", curcv);
#ifdef HAVE_FUTURE_CHAIN_CANCEL
future_chain_on_cancel(state->returning_future, state->awaiting_future);
if(!SvROK(state->returning_future))
panic("ARGH we lost state->returning_future for curcv=%p\n", curcv);
#endif
( run in 0.950 second using v1.01-cache-2.11-cpan-65fba6d93b7 )