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.425 by root, Wed Dec 5 00:14:22 2012 UTC vs.
Revision 1.426 by root, Wed Dec 5 00:19:57 2012 UTC

3621void 3621void
3622list () 3622list ()
3623 PROTOTYPE: 3623 PROTOTYPE:
3624 PPCODE: 3624 PPCODE:
3625{ 3625{
3626 struct coro *coro; 3626 struct coro *coro;
3627 for (coro = coro_first; coro; coro = coro->next) 3627 for (coro = coro_first; coro; coro = coro->next)
3628 if (coro->hv) 3628 if (coro->hv)
3629 XPUSHs (sv_2mortal (newRV_inc ((SV *)coro->hv))); 3629 XPUSHs (sv_2mortal (newRV_inc ((SV *)coro->hv)));
3630} 3630}
3631 3631
3793 3793
3794void 3794void
3795times (Coro::State self) 3795times (Coro::State self)
3796 PPCODE: 3796 PPCODE:
3797{ 3797{
3798 struct coro *current = SvSTATE (coro_current); 3798 struct coro *current = SvSTATE (coro_current);
3799 3799
3800 if (ecb_expect_false (current == self)) 3800 if (ecb_expect_false (current == self))
3801 { 3801 {
3802 coro_times_update (); 3802 coro_times_update ();
3803 coro_times_add (SvSTATE (coro_current)); 3803 coro_times_add (SvSTATE (coro_current));
4078 on_leave = 1 4078 on_leave = 1
4079 PROTOTYPE: & 4079 PROTOTYPE: &
4080 CODE: 4080 CODE:
4081{ 4081{
4082 struct coro *coro = SvSTATE_current; 4082 struct coro *coro = SvSTATE_current;
4083 AV **avp = ix ? &coro->on_leave : &coro->on_enter; 4083 AV **avp = ix ? &coro->on_leave : &coro->on_enter;
4084 4084
4085 block = s_get_cv_croak (block); 4085 block = s_get_cv_croak (block);
4086 4086
4087 if (!*avp) 4087 if (!*avp)
4088 *avp = newAV (); 4088 *avp = newAV ();
4108 4108
4109SV * 4109SV *
4110new (SV *klass, SV *count = 0) 4110new (SV *klass, SV *count = 0)
4111 CODE: 4111 CODE:
4112{ 4112{
4113 int semcnt = 1; 4113 int semcnt = 1;
4114 4114
4115 if (count) 4115 if (count)
4116 { 4116 {
4117 SvGETMAGIC (count); 4117 SvGETMAGIC (count);
4118 4118
4178 XSRETURN_NO; 4178 XSRETURN_NO;
4179} 4179}
4180 4180
4181void 4181void
4182waiters (SV *self) 4182waiters (SV *self)
4183 PPCODE: 4183 PPCODE:
4184{ 4184{
4185 AV *av = (AV *)SvRV (self); 4185 AV *av = (AV *)SvRV (self);
4186 int wcount = AvFILLp (av) + 1 - 1; 4186 int wcount = AvFILLp (av) + 1 - 1;
4187 4187
4188 if (GIMME_V == G_SCALAR) 4188 if (GIMME_V == G_SCALAR)
4200 4200
4201void 4201void
4202_may_delete (SV *sem, int count, unsigned int extra_refs) 4202_may_delete (SV *sem, int count, unsigned int extra_refs)
4203 PPCODE: 4203 PPCODE:
4204{ 4204{
4205 AV *av = (AV *)SvRV (sem); 4205 AV *av = (AV *)SvRV (sem);
4206 4206
4207 if (SvREFCNT ((SV *)av) == 1 + extra_refs 4207 if (SvREFCNT ((SV *)av) == 1 + extra_refs
4208 && AvFILLp (av) == 0 /* no waiters, just count */ 4208 && AvFILLp (av) == 0 /* no waiters, just count */
4209 && SvIV (AvARRAY (av)[0]) == count) 4209 && SvIV (AvARRAY (av)[0]) == count)
4210 XSRETURN_YES; 4210 XSRETURN_YES;
4231 4231
4232void 4232void
4233broadcast (SV *self) 4233broadcast (SV *self)
4234 CODE: 4234 CODE:
4235{ 4235{
4236 AV *av = (AV *)SvRV (self); 4236 AV *av = (AV *)SvRV (self);
4237 coro_signal_wake (aTHX_ av, AvFILLp (av)); 4237 coro_signal_wake (aTHX_ av, AvFILLp (av));
4238} 4238}
4239 4239
4240void 4240void
4241send (SV *self) 4241send (SV *self)
4249 SvIVX (AvARRAY (av)[0]) = 1; /* remember the signal */ 4249 SvIVX (AvARRAY (av)[0]) = 1; /* remember the signal */
4250} 4250}
4251 4251
4252IV 4252IV
4253awaited (SV *self) 4253awaited (SV *self)
4254 CODE: 4254 CODE:
4255 RETVAL = AvFILLp ((AV *)SvRV (self)) + 1 - 1; 4255 RETVAL = AvFILLp ((AV *)SvRV (self)) + 1 - 1;
4256 OUTPUT: 4256 OUTPUT:
4257 RETVAL 4257 RETVAL
4258 4258
4259 4259
4264 4264
4265void 4265void
4266_schedule (...) 4266_schedule (...)
4267 CODE: 4267 CODE:
4268{ 4268{
4269 static int incede; 4269 static int incede;
4270 4270
4271 api_cede_notself (aTHX); 4271 api_cede_notself (aTHX);
4272 4272
4273 ++incede; 4273 ++incede;
4274 while (coro_nready >= incede && api_cede (aTHX)) 4274 while (coro_nready >= incede && api_cede (aTHX))

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines