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.198 by root, Sun Oct 7 03:58:37 2007 UTC vs.
Revision 1.199 by root, Sun Oct 7 13:53:37 2007 UTC

148static HV *coro_state_stash, *coro_stash; 148static HV *coro_state_stash, *coro_stash;
149static SV *coro_mortal; /* will be freed after next transfer */ 149static SV *coro_mortal; /* will be freed after next transfer */
150 150
151static GV *irsgv; /* $/ */ 151static GV *irsgv; /* $/ */
152static GV *stdoutgv; /* *STDOUT */ 152static GV *stdoutgv; /* *STDOUT */
153static SV *sv_diehook;
154static SV *sv_warnhook;
153 155
154/* async_pool helper stuff */ 156/* async_pool helper stuff */
155static SV *sv_pool_rss; 157static SV *sv_pool_rss;
156static SV *sv_pool_size; 158static SV *sv_pool_size;
157static AV *av_async_pool; 159static AV *av_async_pool;
254static AV *coro_ready [PRIO_MAX-PRIO_MIN+1]; 256static AV *coro_ready [PRIO_MAX-PRIO_MIN+1];
255static int coro_nready; 257static int coro_nready;
256static struct coro *coro_first; 258static struct coro *coro_first;
257 259
258/** lowlevel stuff **********************************************************/ 260/** lowlevel stuff **********************************************************/
261
262static SV *
263coro_get_sv (const char *name, int create)
264{
265#if PERL_VERSION_ATLEAST (5,9,0)
266 /* silence stupid and wrong 5.10 warning that I am unable to switch off */
267 get_sv (name, create);
268#endif
269 return get_sv (name, create);
270}
271
272static SV *
273coro_get_av (const char *name, int create)
274{
275#if PERL_VERSION_ATLEAST (5,9,0)
276 /* silence stupid and wrong 5.10 warning that I am unable to switch off */
277 get_av (name, create);
278#endif
279 return get_av (name, create);
280}
259 281
260static AV * 282static AV *
261coro_clone_padlist (pTHX_ CV *cv) 283coro_clone_padlist (pTHX_ CV *cv)
262{ 284{
263 AV *padlist = CvPADLIST (cv); 285 AV *padlist = CvPADLIST (cv);
649 PL_curpm = 0; 671 PL_curpm = 0;
650 PL_curpad = 0; 672 PL_curpad = 0;
651 PL_localizing = 0; 673 PL_localizing = 0;
652 PL_dirty = 0; 674 PL_dirty = 0;
653 PL_restartop = 0; 675 PL_restartop = 0;
654 PL_diehook = 0; 676 PL_diehook = SvREFCNT_inc (sv_diehook);
655 PL_warnhook = 0; 677 PL_warnhook = SvREFCNT_inc (sv_warnhook);
656 678
657 GvSV (PL_defgv) = newSV (0); 679 GvSV (PL_defgv) = newSV (0);
658 GvAV (PL_defgv) = coro->args; coro->args = 0; 680 GvAV (PL_defgv) = coro->args; coro->args = 0;
659 GvSV (PL_errgv) = newSV (0); 681 GvSV (PL_errgv) = newSV (0);
660 GvSV (irsgv) = newSVpvn ("\n", 1); sv_magic (GvSV (irsgv), (SV *)irsgv, PERL_MAGIC_sv, "/", 0); 682 GvSV (irsgv) = newSVpvn ("\n", 1); sv_magic (GvSV (irsgv), (SV *)irsgv, PERL_MAGIC_sv, "/", 0);
1465 BOOT_PAGESIZE; 1487 BOOT_PAGESIZE;
1466 1488
1467 irsgv = gv_fetchpv ("/" , GV_ADD|GV_NOTQUAL, SVt_PV); 1489 irsgv = gv_fetchpv ("/" , GV_ADD|GV_NOTQUAL, SVt_PV);
1468 stdoutgv = gv_fetchpv ("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO); 1490 stdoutgv = gv_fetchpv ("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO);
1469 1491
1492 sv_diehook = coro_get_sv ("Coro::State::DIEHOOK" , TRUE);
1493 sv_warnhook = coro_get_sv ("Coro::State::WARNHOOK", TRUE);
1494
1495 if (!PL_diehook) PL_diehook = SvREFCNT_inc (sv_diehook);
1496 if (!PL_warnhook) PL_warnhook = SvREFCNT_inc (sv_warnhook);
1497
1470 coro_state_stash = gv_stashpv ("Coro::State", TRUE); 1498 coro_state_stash = gv_stashpv ("Coro::State", TRUE);
1471 1499
1472 newCONSTSUB (coro_state_stash, "CC_TRACE" , newSViv (CC_TRACE)); 1500 newCONSTSUB (coro_state_stash, "CC_TRACE" , newSViv (CC_TRACE));
1473 newCONSTSUB (coro_state_stash, "CC_TRACE_SUB" , newSViv (CC_TRACE_SUB)); 1501 newCONSTSUB (coro_state_stash, "CC_TRACE_SUB" , newSViv (CC_TRACE_SUB));
1474 newCONSTSUB (coro_state_stash, "CC_TRACE_LINE", newSViv (CC_TRACE_LINE)); 1502 newCONSTSUB (coro_state_stash, "CC_TRACE_LINE", newSViv (CC_TRACE_LINE));
1703 1731
1704BOOT: 1732BOOT:
1705{ 1733{
1706 int i; 1734 int i;
1707 1735
1708 sv_pool_rss = get_sv ("Coro::POOL_RSS" , TRUE); 1736 sv_pool_rss = coro_get_sv ("Coro::POOL_RSS" , TRUE);
1709 get_sv ("Coro::POOL_RSS" , TRUE); /* silence stupid 5.10 warning */
1710 sv_pool_size = get_sv ("Coro::POOL_SIZE" , TRUE); 1737 sv_pool_size = coro_get_sv ("Coro::POOL_SIZE" , TRUE);
1711 get_sv ("Coro::POOL_SIZE" , TRUE); /* silence stupid 5.10 warning */
1712 av_async_pool = get_av ("Coro::async_pool", TRUE); 1738 av_async_pool = coro_get_av ("Coro::async_pool", TRUE);
1713 get_av ("Coro::async_pool", TRUE); /* silence stupid 5.10 warning */
1714 1739
1715 coro_current = get_sv ("Coro::current", FALSE); 1740 coro_current = coro_get_sv ("Coro::current", FALSE);
1716 SvREADONLY_on (coro_current); 1741 SvREADONLY_on (coro_current);
1717 1742
1718 coro_stash = gv_stashpv ("Coro", TRUE); 1743 coro_stash = gv_stashpv ("Coro", TRUE);
1719 1744
1720 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (PRIO_MAX)); 1745 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (PRIO_MAX));

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines