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.171 by root, Sat Sep 29 19:42:10 2007 UTC vs.
Revision 1.172 by root, Sun Sep 30 13:15:01 2007 UTC

199 199
200#define VAR(name,type) type name; 200#define VAR(name,type) type name;
201# include "state.h" 201# include "state.h"
202#undef VAR 202#undef VAR
203 203
204 /* statistics */
205 int usecount; /* number of switches to this coro */
206
204 /* coro process data */ 207 /* coro process data */
205 int prio; 208 int prio;
206 209
207 /* linked list */ 210 /* linked list */
208 struct coro *next, *prev; 211 struct coro *next, *prev;
307 HV *stash; 310 HV *stash;
308 MAGIC *mg; 311 MAGIC *mg;
309 312
310 if (SvROK (coro)) 313 if (SvROK (coro))
311 coro = SvRV (coro); 314 coro = SvRV (coro);
315
316 if (SvTYPE (coro) != SVt_PVHV)
317 croak ("Coro::State object required");
312 318
313 stash = SvSTASH (coro); 319 stash = SvSTASH (coro);
314 if (stash != coro_stash && stash != coro_state_stash) 320 if (stash != coro_stash && stash != coro_state_stash)
315 { 321 {
316 /* very slow, but rare, check */ 322 /* very slow, but rare, check */
1014 prev->cctx = 0; 1020 prev->cctx = 0;
1015 1021
1016 cctx_put (prev__cctx); 1022 cctx_put (prev__cctx);
1017 } 1023 }
1018 1024
1025 ++next->usecount;
1026
1019 if (!next->cctx) 1027 if (!next->cctx)
1020 next->cctx = cctx_get (aTHX); 1028 next->cctx = cctx_get (aTHX);
1021 1029
1022 if (prev__cctx != next->cctx) 1030 if (prev__cctx != next->cctx)
1023 { 1031 {
1553 save_perl (aTHX_ coro); 1561 save_perl (aTHX_ coro);
1554 load_perl (aTHX_ &temp); 1562 load_perl (aTHX_ &temp);
1555 } 1563 }
1556 } 1564 }
1557} 1565}
1558 1566
1559SV * 1567SV *
1560is_ready (Coro::State coro) 1568is_ready (Coro::State coro)
1561 PROTOTYPE: $ 1569 PROTOTYPE: $
1562 ALIAS: 1570 ALIAS:
1563 is_ready = CF_READY 1571 is_ready = CF_READY
1610 RETVAL 1618 RETVAL
1611 1619
1612IV 1620IV
1613rss (Coro::State coro) 1621rss (Coro::State coro)
1614 PROTOTYPE: $ 1622 PROTOTYPE: $
1623 ALIAS:
1624 usecount = 1
1615 CODE: 1625 CODE:
1626 switch (ix)
1627 {
1616 RETVAL = coro_rss (aTHX_ coro); 1628 case 0: RETVAL = coro_rss (aTHX_ coro); break;
1629 case 1: RETVAL = coro->usecount; break;
1630 }
1617 OUTPUT: 1631 OUTPUT:
1618 RETVAL 1632 RETVAL
1619 1633
1620 1634
1621MODULE = Coro::State PACKAGE = Coro 1635MODULE = Coro::State PACKAGE = Coro

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines