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.159 by root, Sat Sep 22 14:42:56 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 av_clear (defav); 1550 sv_setsv (cb, AvARRAY (invoke_av)[0]);
1551
1552 RETVAL = sv_2mortal (SvREFCNT_inc (AvARRAY (invoke_av)[0]));
1553 1551
1554 if (len > 0) 1552 if (len > 0)
1555 { 1553 {
1556 av_extend (defav, len); 1554 av_fill (defav, len - 1);
1557 for (i = 0; i < len; ++i) 1555 for (i = 0; i < len; ++i)
1558 av_store (defav, i, SvREFCNT_inc (AvARRAY (invoke_av)[i + 1])); 1556 av_store (defav, i, SvREFCNT_inc (AvARRAY (invoke_av)[i + 1]));
1559 } 1557 }
1560 1558
1561 SvREFCNT_dec (invoke); 1559 SvREFCNT_dec (invoke);
1562} 1560}
1563 OUTPUT:
1564 RETVAL
1565 1561
1566void 1562void
1567_pool_2 (...) 1563_pool_2 (SV *cb)
1568 CODE: 1564 CODE:
1569{ 1565{
1570 struct coro *coro = SvSTATE (coro_current); 1566 struct coro *coro = SvSTATE (coro_current);
1567
1568 sv_setsv (cb, &PL_sv_undef);
1571 1569
1572 if (coro_rss (coro) > SvIV (sv_pool_rss) 1570 if (coro_rss (coro) > SvIV (sv_pool_rss)
1573 || av_len (av_async_pool) + 1 >= SvIV (sv_pool_size)) 1571 || av_len (av_async_pool) + 1 >= SvIV (sv_pool_size))
1574 XSRETURN_YES; 1572 croak ("\3terminate\2\n");
1575 1573
1576 av_clear (GvAV (PL_defgv)); 1574 av_clear (GvAV (PL_defgv));
1577 hv_store (SvRV (coro_current), "desc", sizeof ("desc") - 1, 1575 hv_store (SvRV (coro_current), "desc", sizeof ("desc") - 1,
1578 newSVpvn ("[async_pool idle]", sizeof ("[async_pool idle]") - 1), 0); 1576 newSVpvn ("[async_pool idle]", sizeof ("[async_pool idle]") - 1), 0);
1579 coro->save = CORO_SAVE_DEF; 1577 coro->save = CORO_SAVE_DEF;
1580 coro->prio = 0; 1578 coro->prio = 0;
1581 av_push (av_async_pool, newSVsv (coro_current)); 1579 av_push (av_async_pool, newSVsv (coro_current));
1582
1583 XSRETURN_NO;
1584} 1580}
1585 1581
1586 1582
1587MODULE = Coro::State PACKAGE = Coro::AIO 1583MODULE = Coro::State PACKAGE = Coro::AIO
1588 1584

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines