… | |
… | |
1123 | if (expect_false (next->flags & CF_DESTROYED)) |
1123 | if (expect_false (next->flags & CF_DESTROYED)) |
1124 | croak ("Coro::State::transfer called with destroyed next Coro::State, but can only transfer to inactive states"); |
1124 | croak ("Coro::State::transfer called with destroyed next Coro::State, but can only transfer to inactive states"); |
1125 | |
1125 | |
1126 | if ( |
1126 | if ( |
1127 | #if PERL_VERSION_ATLEAST (5,9,0) |
1127 | #if PERL_VERSION_ATLEAST (5,9,0) |
1128 | expect_false (PL_parser) |
1128 | expect_false (PL_parser && PL_parser->lex_state != LEX_NOTPARSING) |
1129 | #else |
1129 | #else |
1130 | expect_false (PL_lex_state != LEX_NOTPARSING) |
1130 | expect_false (PL_lex_state != LEX_NOTPARSING) |
1131 | #endif |
1131 | #endif |
1132 | ) |
1132 | ) |
1133 | croak ("Coro::State::transfer called while parsing, but this is not supported"); |
1133 | croak ("Coro::State::transfer called while parsing, but this is not supported"); |
… | |
… | |
1909 | SV *invoke = hv_delete (hv, "_invoke", sizeof ("_invoke") - 1, 0); |
1909 | SV *invoke = hv_delete (hv, "_invoke", sizeof ("_invoke") - 1, 0); |
1910 | AV *invoke_av; |
1910 | AV *invoke_av; |
1911 | int i, len; |
1911 | int i, len; |
1912 | |
1912 | |
1913 | if (!invoke) |
1913 | if (!invoke) |
|
|
1914 | { |
|
|
1915 | SvREFCNT_dec (PL_diehook); PL_diehook = 0; |
1914 | croak ("\3async_pool terminate\2\n"); |
1916 | croak ("\3async_pool terminate\2\n"); |
|
|
1917 | } |
1915 | |
1918 | |
1916 | SvREFCNT_dec (coro->saved_deffh); |
1919 | SvREFCNT_dec (coro->saved_deffh); |
1917 | coro->saved_deffh = SvREFCNT_inc ((SV *)PL_defoutgv); |
1920 | coro->saved_deffh = SvREFCNT_inc ((SV *)PL_defoutgv); |
1918 | |
1921 | |
1919 | hv_store (hv, "desc", sizeof ("desc") - 1, |
1922 | hv_store (hv, "desc", sizeof ("desc") - 1, |
… | |
… | |
1945 | SvREFCNT_dec ((SV *)PL_defoutgv); PL_defoutgv = (GV *)coro->saved_deffh; |
1948 | SvREFCNT_dec ((SV *)PL_defoutgv); PL_defoutgv = (GV *)coro->saved_deffh; |
1946 | coro->saved_deffh = 0; |
1949 | coro->saved_deffh = 0; |
1947 | |
1950 | |
1948 | if (coro_rss (aTHX_ coro) > SvIV (sv_pool_rss) |
1951 | if (coro_rss (aTHX_ coro) > SvIV (sv_pool_rss) |
1949 | || av_len (av_async_pool) + 1 >= SvIV (sv_pool_size)) |
1952 | || av_len (av_async_pool) + 1 >= SvIV (sv_pool_size)) |
|
|
1953 | { |
|
|
1954 | SvREFCNT_dec (PL_diehook); PL_diehook = 0; |
1950 | croak ("\3async_pool terminate\2\n"); |
1955 | croak ("\3async_pool terminate\2\n"); |
|
|
1956 | } |
1951 | |
1957 | |
1952 | av_clear (GvAV (PL_defgv)); |
1958 | av_clear (GvAV (PL_defgv)); |
1953 | hv_store ((HV *)SvRV (coro_current), "desc", sizeof ("desc") - 1, |
1959 | hv_store ((HV *)SvRV (coro_current), "desc", sizeof ("desc") - 1, |
1954 | newSVpvn ("[async_pool idle]", sizeof ("[async_pool idle]") - 1), 0); |
1960 | newSVpvn ("[async_pool idle]", sizeof ("[async_pool idle]") - 1), 0); |
1955 | |
1961 | |