… | |
… | |
1760 | |
1760 | |
1761 | if (!coro->invoke_cb) |
1761 | if (!coro->invoke_cb) |
1762 | return 1; /* loop till we have invoke */ |
1762 | return 1; /* loop till we have invoke */ |
1763 | else |
1763 | else |
1764 | { |
1764 | { |
1765 | int i, len; |
|
|
1766 | |
|
|
1767 | hv_store (hv, "desc", sizeof ("desc") - 1, |
1765 | hv_store (hv, "desc", sizeof ("desc") - 1, |
1768 | newSVpvn ("[async_pool]", sizeof ("[async_pool]") - 1), 0); |
1766 | newSVpvn ("[async_pool]", sizeof ("[async_pool]") - 1), 0); |
1769 | |
1767 | |
1770 | coro->saved_deffh = SvREFCNT_inc_NN ((SV *)PL_defoutgv); |
1768 | coro->saved_deffh = SvREFCNT_inc_NN ((SV *)PL_defoutgv); |
1771 | |
|
|
1772 | len = av_len (coro->invoke_av); |
|
|
1773 | |
1769 | |
1774 | { |
1770 | { |
1775 | dSP; |
1771 | dSP; |
1776 | XPUSHs (sv_2mortal (coro->invoke_cb)); coro->invoke_cb = 0; |
1772 | XPUSHs (sv_2mortal (coro->invoke_cb)); coro->invoke_cb = 0; |
1777 | PUTBACK; |
1773 | PUTBACK; |
… | |
… | |
1841 | SV *data = (SV *)GENSUB_ARG; |
1837 | SV *data = (SV *)GENSUB_ARG; |
1842 | |
1838 | |
1843 | if (SvTYPE (SvRV (data)) != SVt_PVAV) |
1839 | if (SvTYPE (SvRV (data)) != SVt_PVAV) |
1844 | { |
1840 | { |
1845 | /* first call, set args */ |
1841 | /* first call, set args */ |
1846 | int i; |
|
|
1847 | AV *av = newAV (); |
1842 | AV *av = newAV (); |
1848 | SV *coro = SvRV (data); |
1843 | SV *coro = SvRV (data); |
1849 | |
1844 | |
1850 | SvRV_set (data, (SV *)av); |
1845 | SvRV_set (data, (SV *)av); |
1851 | api_ready (aTHX_ coro); |
1846 | api_ready (aTHX_ coro); |
… | |
… | |
3091 | PUSHMARK (SP); |
3086 | PUSHMARK (SP); |
3092 | EXTEND (SP, 2); |
3087 | EXTEND (SP, 2); |
3093 | PUSHs (sv_Coro); |
3088 | PUSHs (sv_Coro); |
3094 | PUSHs ((SV *)cv_pool_handler); |
3089 | PUSHs ((SV *)cv_pool_handler); |
3095 | PUTBACK; |
3090 | PUTBACK; |
3096 | call_sv (cv_coro_new, G_SCALAR); |
3091 | call_sv ((SV *)cv_coro_new, G_SCALAR); |
3097 | SPAGAIN; |
3092 | SPAGAIN; |
3098 | |
3093 | |
3099 | hv = (HV *)SvREFCNT_inc_NN (SvRV (POPs)); |
3094 | hv = (HV *)SvREFCNT_inc_NN (SvRV (POPs)); |
3100 | } |
3095 | } |
3101 | |
3096 | |
… | |
… | |
3106 | assert (!coro->invoke_av); |
3101 | assert (!coro->invoke_av); |
3107 | coro->invoke_cb = SvREFCNT_inc (cb); |
3102 | coro->invoke_cb = SvREFCNT_inc (cb); |
3108 | coro->invoke_av = av; |
3103 | coro->invoke_av = av; |
3109 | } |
3104 | } |
3110 | |
3105 | |
3111 | api_ready ((SV *)hv); |
3106 | api_ready (aTHX_ (SV *)hv); |
3112 | |
3107 | |
3113 | if (GIMME_V != G_VOID) |
3108 | if (GIMME_V != G_VOID) |
3114 | XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv))); |
3109 | XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv))); |
3115 | else |
3110 | else |
3116 | SvREFCNT_dec (hv); |
3111 | SvREFCNT_dec (hv); |