… | |
… | |
14 | #define CD_HITS 3 /* hardcoded in Coro::Event */ |
14 | #define CD_HITS 3 /* hardcoded in Coro::Event */ |
15 | #define CD_GOT 4 /* hardcoded in Coro::Event, Coro::Handle */ |
15 | #define CD_GOT 4 /* hardcoded in Coro::Event, Coro::Handle */ |
16 | #define CD_MAX 4 |
16 | #define CD_MAX 4 |
17 | |
17 | |
18 | static HV *coro_event_event_stash; |
18 | static HV *coro_event_event_stash; |
|
|
19 | |
|
|
20 | #define PERL_MAGIC_coro_event 0x18 /* to avoid clashes with e.g. event */ |
19 | |
21 | |
20 | static void |
22 | static void |
21 | coro_std_cb (pe_event *pe) |
23 | coro_std_cb (pe_event *pe) |
22 | { |
24 | { |
23 | AV *priv = (AV *)pe->ext_data; |
25 | AV *priv = (AV *)pe->ext_data; |
… | |
… | |
105 | SvREADONLY_on (priv); |
107 | SvREADONLY_on (priv); |
106 | |
108 | |
107 | w->callback = coro_std_cb; |
109 | w->callback = coro_std_cb; |
108 | w->ext_data = priv; |
110 | w->ext_data = priv; |
109 | |
111 | |
110 | /* make sure Event does not use PERL_MAGIC_uvar, which */ |
|
|
111 | /* we abuse for non-uvar purposes. */ |
|
|
112 | sv_magicext (SvRV (self), newRV_noinc ((SV *)priv), PERL_MAGIC_uvar, 0, 0, 0); |
112 | sv_magicext (SvRV (self), newRV_noinc ((SV *)priv), PERL_MAGIC_coro_event, 0, (char *)w, 0); |
113 | } |
113 | } |
114 | } |
114 | } |
115 | |
115 | |
116 | void |
116 | void |
117 | _next (SV *self) |
117 | _next (SV *self) |