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.163 by root, Mon Sep 24 18:30:58 2007 UTC

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
1433SV *
1434has_stack (Coro::State coro)
1435 PROTOTYPE: $
1436 CODE:
1437 RETVAL = boolSV (!!coro->cctx);
1438 OUTPUT:
1439 RETVAL
1440
1433IV 1441IV
1434rss (Coro::State coro) 1442rss (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
1531SV * 1539void
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
1565void 1570void
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
1586MODULE = Coro::State PACKAGE = Coro::AIO 1591MODULE = Coro::State PACKAGE = Coro::AIO
1587 1592

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines