ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Coro/EV/EV.xs
(Generate patch)

Comparing Coro/EV/EV.xs (file contents):
Revision 1.16 by root, Thu May 29 03:31:53 2008 UTC vs.
Revision 1.17 by root, Sun Jun 15 22:31:33 2008 UTC

65} 65}
66 66
67static void 67static void
68readyhook (void) 68readyhook (void)
69{ 69{
70 if (!ev_is_active (&idler))
70 ev_idle_start (EV_DEFAULT_UC, &idler); 71 ev_idle_start (EV_DEFAULT_UC, &idler);
71} 72}
72 73
73/*****************************************************************************/ 74/*****************************************************************************/
74 75
75typedef struct 76typedef struct
92 coro_handle *data = (coro_handle *)mg->mg_ptr; 93 coro_handle *data = (coro_handle *)mg->mg_ptr;
93 mg->mg_ptr = 0; 94 mg->mg_ptr = 0;
94 95
95 ev_io_stop (EV_DEFAULT_UC, &data->r.io); ev_io_stop (EV_DEFAULT_UC, &data->w.io); 96 ev_io_stop (EV_DEFAULT_UC, &data->r.io); ev_io_stop (EV_DEFAULT_UC, &data->w.io);
96 ev_timer_stop (EV_DEFAULT_UC, &data->r.tw); ev_timer_stop (EV_DEFAULT_UC, &data->w.tw); 97 ev_timer_stop (EV_DEFAULT_UC, &data->r.tw); ev_timer_stop (EV_DEFAULT_UC, &data->w.tw);
97 SvREFCNT_dec (data->r.done); SvREFCNT_dec (data->w.done); 98 SvREFCNT_dec (data->r.done); SvREFCNT_dec (data->w.done);
98 SvREFCNT_dec (data->r.current); SvREFCNT_dec (data->w.current); 99 SvREFCNT_dec (data->r.current); SvREFCNT_dec (data->w.current);
99 100
100 return 0; 101 return 0;
101} 102}
102 103
103static MGVTBL handle_vtbl = { 0, 0, 0, 0, handle_free }; 104static MGVTBL handle_vtbl = { 0, 0, 0, 0, handle_free };
137BOOT: 138BOOT:
138{ 139{
139 I_EV_API ("Coro::EV"); 140 I_EV_API ("Coro::EV");
140 I_CORO_API ("Coro::Event"); 141 I_CORO_API ("Coro::Event");
141 142
143 EV_DEFAULT; /* make sure it is initialised */
144
142 ev_prepare_init (&scheduler, prepare_cb); 145 ev_prepare_init (&scheduler, prepare_cb);
143 ev_set_priority (&scheduler, EV_MINPRI); 146 ev_set_priority (&scheduler, EV_MINPRI);
144 ev_prepare_start (EV_DEFAULT, &scheduler); 147 ev_prepare_start (EV_DEFAULT_UC, &scheduler);
145 ev_unref (EV_DEFAULT); 148 ev_unref (EV_DEFAULT_UC);
146 149
147 ev_idle_init (&idler, idle_cb); 150 ev_idle_init (&idler, idle_cb);
148 ev_set_priority (&idler, EV_MINPRI); 151 ev_set_priority (&idler, EV_MINPRI);
149 152
150 CORO_READYHOOK = readyhook; 153 CORO_READYHOOK = readyhook;
151} 154}
152 155
153void 156void
154_loop_oneshot () 157_loop_oneshot ()
155 CODE: 158 CODE:
159{
160 /* inhibit the prepare watcher, as we know we are the only
161 * ready coroutine and we don't want it to start an idle watcher
162 * just because of the fallback idle coro being of lower priority.
163 */
156 ++inhibit; 164 ++inhibit;
165
166 /* same reasoning as above, make sure it is stopped */
167 if (ev_is_active (&idler))
168 ev_idle_stop (EV_DEFAULT_UC, &idler);
169
157 ev_loop (EV_DEFAULT, EVLOOP_ONESHOT); 170 ev_loop (EV_DEFAULT_UC, EVLOOP_ONESHOT);
171
158 --inhibit; 172 --inhibit;
173}
159 174
160void 175void
161_timed_io_once (...) 176_timed_io_once (...)
162 CODE: 177 CODE:
163{ 178{
164 ONCE_INIT; 179 ONCE_INIT;
165 assert (AvFILLp (av) >= 1); 180 assert (AvFILLp (av) >= 1);
166 ev_once ( 181 ev_once (
167 EV_DEFAULT, 182 EV_DEFAULT_UC,
168 sv_fileno (AvARRAY (av)[0]), 183 sv_fileno (AvARRAY (av)[0]),
169 SvIV (AvARRAY (av)[1]), 184 SvIV (AvARRAY (av)[1]),
170 AvFILLp (av) >= 2 && SvOK (AvARRAY (av)[2]) ? SvNV (AvARRAY (av)[2]) : -1., 185 AvFILLp (av) >= 2 && SvOK (AvARRAY (av)[2]) ? SvNV (AvARRAY (av)[2]) : -1.,
171 once_cb, 186 once_cb,
172 (void *)SvREFCNT_inc (av) 187 (void *)SvREFCNT_inc (av)
179 CODE: 194 CODE:
180{ 195{
181 ONCE_INIT; 196 ONCE_INIT;
182 NV after = SvNV (AvARRAY (av)[0]); 197 NV after = SvNV (AvARRAY (av)[0]);
183 ev_once ( 198 ev_once (
184 EV_DEFAULT, 199 EV_DEFAULT_UC,
185 -1, 200 -1,
186 0, 201 0,
187 after >= 0. ? after : 0., 202 after >= 0. ? after : 0.,
188 once_cb, 203 once_cb,
189 (void *)SvREFCNT_inc (av) 204 (void *)SvREFCNT_inc (av)
234 SV *to = AvARRAY (handle)[2]; 249 SV *to = AvARRAY (handle)[2];
235 250
236 if (SvOK (to)) 251 if (SvOK (to))
237 { 252 {
238 ev_timer_set (&dir->tw, 0., SvNV (to)); 253 ev_timer_set (&dir->tw, 0., SvNV (to));
239 ev_timer_again (EV_DEFAULT, &dir->tw); 254 ev_timer_again (EV_DEFAULT_UC, &dir->tw);
240 } 255 }
241 } 256 }
242 257
243 ev_io_start (EV_DEFAULT, &dir->io); 258 ev_io_start (EV_DEFAULT_UC, &dir->io);
244} 259}
245 260

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines