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.160 by root, Sat Sep 22 22:39:15 2007 UTC vs.
Revision 1.161 by root, Sat Sep 22 22:59:31 2007 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines