… | |
… | |
1428 | CODE: |
1428 | CODE: |
1429 | RETVAL = boolSV (coro->flags & ix); |
1429 | RETVAL = boolSV (coro->flags & ix); |
1430 | OUTPUT: |
1430 | OUTPUT: |
1431 | RETVAL |
1431 | RETVAL |
1432 | |
1432 | |
|
|
1433 | SV * |
|
|
1434 | has_stack (Coro::State coro) |
|
|
1435 | PROTOTYPE: $ |
|
|
1436 | CODE: |
|
|
1437 | RETVAL = boolSV (!!coro->cctx); |
|
|
1438 | OUTPUT: |
|
|
1439 | RETVAL |
|
|
1440 | |
1433 | IV |
1441 | IV |
1434 | rss (Coro::State coro) |
1442 | rss (Coro::State coro) |
1435 | PROTOTYPE: $ |
1443 | PROTOTYPE: $ |
1436 | CODE: |
1444 | CODE: |
1437 | RETVAL = coro_rss (coro); |
1445 | RETVAL = coro_rss (coro); |
… | |
… | |
1526 | RETVAL = coro_nready; |
1534 | RETVAL = coro_nready; |
1527 | OUTPUT: |
1535 | OUTPUT: |
1528 | RETVAL |
1536 | RETVAL |
1529 | |
1537 | |
1530 | # for async_pool speedup |
1538 | # for async_pool speedup |
1531 | SV * |
1539 | void |
1532 | _pool_1 (...) |
1540 | _pool_1 (SV *cb) |
1533 | CODE: |
1541 | CODE: |
1534 | { |
1542 | { |
1535 | int i, len; |
1543 | int i, len; |
1536 | HV *hv = (HV *)SvRV (coro_current); |
1544 | HV *hv = (HV *)SvRV (coro_current); |
1537 | AV *defav = GvAV (PL_defgv); |
1545 | AV *defav = GvAV (PL_defgv); |
1538 | SV *invoke = hv_delete (hv, "_invoke", sizeof ("_invoke") - 1, 0); |
1546 | SV *invoke = hv_delete (hv, "_invoke", sizeof ("_invoke") - 1, 0); |
1539 | AV *invoke_av; |
1547 | AV *invoke_av; |
1540 | |
1548 | |
1541 | if (!invoke) |
1549 | if (!invoke) |
1542 | XSRETURN_EMPTY; |
1550 | croak ("\3terminate\2\n"); |
1543 | |
1551 | |
1544 | hv_store (hv, "desc", sizeof ("desc") - 1, |
1552 | hv_store (hv, "desc", sizeof ("desc") - 1, |
1545 | newSVpvn ("[async_pool]", sizeof ("[async_pool]") - 1), 0); |
1553 | newSVpvn ("[async_pool]", sizeof ("[async_pool]") - 1), 0); |
1546 | |
1554 | |
1547 | invoke_av = (AV *)SvRV (invoke); |
1555 | invoke_av = (AV *)SvRV (invoke); |
1548 | len = av_len (invoke_av); |
1556 | len = av_len (invoke_av); |
1549 | |
1557 | |
1550 | RETVAL = SvREFCNT_inc (AvARRAY (invoke_av)[0]); |
1558 | sv_setsv (cb, AvARRAY (invoke_av)[0]); |
1551 | |
1559 | |
1552 | if (len > 0) |
1560 | if (len > 0) |
1553 | { |
1561 | { |
1554 | av_clear (defav); |
|
|
1555 | av_extend (defav, len); |
1562 | av_fill (defav, len - 1); |
1556 | for (i = 0; i < len; ++i) |
1563 | for (i = 0; i < len; ++i) |
1557 | av_store (defav, i, SvREFCNT_inc (AvARRAY (invoke_av)[i + 1])); |
1564 | av_store (defav, i, SvREFCNT_inc (AvARRAY (invoke_av)[i + 1])); |
1558 | } |
1565 | } |
1559 | |
1566 | |
1560 | SvREFCNT_dec (invoke); |
1567 | SvREFCNT_dec (invoke); |
1561 | } |
1568 | } |
1562 | OUTPUT: |
|
|
1563 | RETVAL |
|
|
1564 | |
1569 | |
1565 | void |
1570 | void |
1566 | _pool_2 (...) |
1571 | _pool_2 (SV *cb) |
1567 | CODE: |
1572 | CODE: |
1568 | { |
1573 | { |
1569 | struct coro *coro = SvSTATE (coro_current); |
1574 | struct coro *coro = SvSTATE (coro_current); |
|
|
1575 | |
|
|
1576 | sv_setsv (cb, &PL_sv_undef); |
1570 | |
1577 | |
1571 | if (coro_rss (coro) > SvIV (sv_pool_rss) |
1578 | if (coro_rss (coro) > SvIV (sv_pool_rss) |
1572 | || av_len (av_async_pool) + 1 >= SvIV (sv_pool_size)) |
1579 | || av_len (av_async_pool) + 1 >= SvIV (sv_pool_size)) |
1573 | XSRETURN_YES; |
1580 | croak ("\3terminate\2\n"); |
1574 | |
1581 | |
1575 | av_clear (GvAV (PL_defgv)); |
1582 | av_clear (GvAV (PL_defgv)); |
1576 | hv_store (SvRV (coro_current), "desc", sizeof ("desc") - 1, |
1583 | hv_store ((HV *)SvRV (coro_current), "desc", sizeof ("desc") - 1, |
1577 | newSVpvn ("[async_pool idle]", sizeof ("[async_pool idle]") - 1), 0); |
1584 | newSVpvn ("[async_pool idle]", sizeof ("[async_pool idle]") - 1), 0); |
1578 | coro->save = CORO_SAVE_DEF; |
1585 | coro->save = CORO_SAVE_DEF; |
1579 | coro->prio = 0; |
1586 | coro->prio = 0; |
1580 | av_push (av_async_pool, newSVsv (coro_current)); |
1587 | av_push (av_async_pool, newSVsv (coro_current)); |
1581 | |
|
|
1582 | XSRETURN_NO; |
|
|
1583 | } |
1588 | } |
1584 | |
1589 | |
1585 | |
1590 | |
1586 | MODULE = Coro::State PACKAGE = Coro::AIO |
1591 | MODULE = Coro::State PACKAGE = Coro::AIO |
1587 | |
1592 | |