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.241 by root, Mon Jul 21 02:39:15 2008 UTC vs.
Revision 1.242 by root, Thu Aug 14 12:48:20 2008 UTC

1890force_cctx () 1890force_cctx ()
1891 CODE: 1891 CODE:
1892 struct coro *coro = SvSTATE (coro_current); 1892 struct coro *coro = SvSTATE (coro_current);
1893 coro->cctx->idle_sp = 0; 1893 coro->cctx->idle_sp = 0;
1894 1894
1895MODULE = Coro::State PACKAGE = Coro
1896
1897BOOT:
1898{
1899 int i;
1900
1901 av_async_pool = coro_get_av (aTHX_ "Coro::async_pool", TRUE);
1902 sv_pool_rss = coro_get_sv (aTHX_ "Coro::POOL_RSS" , TRUE);
1903 sv_pool_size = coro_get_sv (aTHX_ "Coro::POOL_SIZE" , TRUE);
1904
1905 coro_current = coro_get_sv (aTHX_ "Coro::current", FALSE);
1906 SvREADONLY_on (coro_current);
1907
1908 coro_stash = gv_stashpv ("Coro", TRUE);
1909
1910 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (PRIO_MAX));
1911 newCONSTSUB (coro_stash, "PRIO_HIGH", newSViv (PRIO_HIGH));
1912 newCONSTSUB (coro_stash, "PRIO_NORMAL", newSViv (PRIO_NORMAL));
1913 newCONSTSUB (coro_stash, "PRIO_LOW", newSViv (PRIO_LOW));
1914 newCONSTSUB (coro_stash, "PRIO_IDLE", newSViv (PRIO_IDLE));
1915 newCONSTSUB (coro_stash, "PRIO_MIN", newSViv (PRIO_MIN));
1916
1917 for (i = PRIO_MAX - PRIO_MIN + 1; i--; )
1918 coro_ready[i] = newAV ();
1919
1920 {
1921 SV *sv = perl_get_sv ("Coro::API", TRUE);
1922 perl_get_sv ("Coro::API", TRUE); /* silence 5.10 warning */
1923
1924 coroapi.schedule = api_schedule;
1925 coroapi.cede = api_cede;
1926 coroapi.cede_notself = api_cede_notself;
1927 coroapi.ready = api_ready;
1928 coroapi.is_ready = api_is_ready;
1929 coroapi.nready = &coro_nready;
1930 coroapi.current = coro_current;
1931
1932 GCoroAPI = &coroapi;
1933 sv_setiv (sv, (IV)&coroapi);
1934 SvREADONLY_on (sv);
1935 }
1936}
1937
1938void
1939_set_current (SV *current)
1940 PROTOTYPE: $
1941 CODE:
1942 SvREFCNT_dec (SvRV (coro_current));
1943 SvRV_set (coro_current, SvREFCNT_inc (SvRV (current)));
1944
1945void
1946_set_readyhook (SV *hook)
1947 PROTOTYPE: $
1948 CODE:
1949 LOCK;
1950 SvREFCNT_dec (coro_readyhook);
1951 coro_readyhook = SvOK (hook) ? newSVsv (hook) : 0;
1952 UNLOCK;
1953
1954int
1955prio (Coro::State coro, int newprio = 0)
1956 ALIAS:
1957 nice = 1
1958 CODE:
1959{
1960 RETVAL = coro->prio;
1961
1962 if (items > 1)
1963 {
1964 if (ix)
1965 newprio = coro->prio - newprio;
1966
1967 if (newprio < PRIO_MIN) newprio = PRIO_MIN;
1968 if (newprio > PRIO_MAX) newprio = PRIO_MAX;
1969
1970 coro->prio = newprio;
1971 }
1972}
1973 OUTPUT:
1974 RETVAL
1975
1976SV *
1977ready (SV *self)
1978 PROTOTYPE: $
1979 CODE:
1980 RETVAL = boolSV (api_ready (self));
1981 OUTPUT:
1982 RETVAL
1983
1984int
1985nready (...)
1986 PROTOTYPE:
1987 CODE:
1988 RETVAL = coro_nready;
1989 OUTPUT:
1990 RETVAL
1991
1992void 1895void
1993throw (Coro::State self, SV *throw = &PL_sv_undef) 1896throw (Coro::State self, SV *throw = &PL_sv_undef)
1994 PROTOTYPE: $;$ 1897 PROTOTYPE: $;$
1995 CODE: 1898 CODE:
1996 SvREFCNT_dec (self->throw); 1899 SvREFCNT_dec (self->throw);
2010 SV **dst = ix ? (SV **)&self->slot->defav : (SV **)&self->slot->defsv; 1913 SV **dst = ix ? (SV **)&self->slot->defav : (SV **)&self->slot->defsv;
2011 1914
2012 SV *tmp = *src; *src = *dst; *dst = tmp; 1915 SV *tmp = *src; *src = *dst; *dst = tmp;
2013 } 1916 }
2014 1917
1918MODULE = Coro::State PACKAGE = Coro
1919
1920BOOT:
1921{
1922 int i;
1923
1924 av_async_pool = coro_get_av (aTHX_ "Coro::async_pool", TRUE);
1925 sv_pool_rss = coro_get_sv (aTHX_ "Coro::POOL_RSS" , TRUE);
1926 sv_pool_size = coro_get_sv (aTHX_ "Coro::POOL_SIZE" , TRUE);
1927
1928 coro_current = coro_get_sv (aTHX_ "Coro::current", FALSE);
1929 SvREADONLY_on (coro_current);
1930
1931 coro_stash = gv_stashpv ("Coro", TRUE);
1932
1933 newCONSTSUB (coro_stash, "PRIO_MAX", newSViv (PRIO_MAX));
1934 newCONSTSUB (coro_stash, "PRIO_HIGH", newSViv (PRIO_HIGH));
1935 newCONSTSUB (coro_stash, "PRIO_NORMAL", newSViv (PRIO_NORMAL));
1936 newCONSTSUB (coro_stash, "PRIO_LOW", newSViv (PRIO_LOW));
1937 newCONSTSUB (coro_stash, "PRIO_IDLE", newSViv (PRIO_IDLE));
1938 newCONSTSUB (coro_stash, "PRIO_MIN", newSViv (PRIO_MIN));
1939
1940 for (i = PRIO_MAX - PRIO_MIN + 1; i--; )
1941 coro_ready[i] = newAV ();
1942
1943 {
1944 SV *sv = perl_get_sv ("Coro::API", TRUE);
1945 perl_get_sv ("Coro::API", TRUE); /* silence 5.10 warning */
1946
1947 coroapi.schedule = api_schedule;
1948 coroapi.cede = api_cede;
1949 coroapi.cede_notself = api_cede_notself;
1950 coroapi.ready = api_ready;
1951 coroapi.is_ready = api_is_ready;
1952 coroapi.nready = &coro_nready;
1953 coroapi.current = coro_current;
1954
1955 GCoroAPI = &coroapi;
1956 sv_setiv (sv, (IV)&coroapi);
1957 SvREADONLY_on (sv);
1958 }
1959}
1960
1961void
1962_set_current (SV *current)
1963 PROTOTYPE: $
1964 CODE:
1965 SvREFCNT_dec (SvRV (coro_current));
1966 SvRV_set (coro_current, SvREFCNT_inc (SvRV (current)));
1967
1968void
1969_set_readyhook (SV *hook)
1970 PROTOTYPE: $
1971 CODE:
1972 LOCK;
1973 SvREFCNT_dec (coro_readyhook);
1974 coro_readyhook = SvOK (hook) ? newSVsv (hook) : 0;
1975 UNLOCK;
1976
1977int
1978prio (Coro::State coro, int newprio = 0)
1979 ALIAS:
1980 nice = 1
1981 CODE:
1982{
1983 RETVAL = coro->prio;
1984
1985 if (items > 1)
1986 {
1987 if (ix)
1988 newprio = coro->prio - newprio;
1989
1990 if (newprio < PRIO_MIN) newprio = PRIO_MIN;
1991 if (newprio > PRIO_MAX) newprio = PRIO_MAX;
1992
1993 coro->prio = newprio;
1994 }
1995}
1996 OUTPUT:
1997 RETVAL
1998
1999SV *
2000ready (SV *self)
2001 PROTOTYPE: $
2002 CODE:
2003 RETVAL = boolSV (api_ready (self));
2004 OUTPUT:
2005 RETVAL
2006
2007int
2008nready (...)
2009 PROTOTYPE:
2010 CODE:
2011 RETVAL = coro_nready;
2012 OUTPUT:
2013 RETVAL
2014
2015# for async_pool speedup 2015# for async_pool speedup
2016void 2016void
2017_pool_1 (SV *cb) 2017_pool_1 (SV *cb)
2018 CODE: 2018 CODE:
2019{ 2019{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines