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.305 by root, Wed Nov 19 10:44:41 2008 UTC vs.
Revision 1.306 by root, Wed Nov 19 11:11:10 2008 UTC

2174 AvARRAY (av)[0] = AvARRAY (av)[1]; 2174 AvARRAY (av)[0] = AvARRAY (av)[1];
2175 AvARRAY (av)[1] = count_sv; 2175 AvARRAY (av)[1] = count_sv;
2176 cb = av_shift (av); 2176 cb = av_shift (av);
2177 2177
2178 if (SvOBJECT (cb)) 2178 if (SvOBJECT (cb))
2179 {
2179 api_ready (aTHX_ cb); 2180 api_ready (aTHX_ cb);
2180 else 2181 --count;
2181 croak ("callbacks not yet supported"); 2182 }
2183 else if (SvTYPE (cb) == SVt_PVCV)
2184 {
2185 dSP;
2186 PUSHMARK (SP);
2187 XPUSHs (sv_2mortal (newRV_inc ((SV *)av)));
2188 PUTBACK;
2189 call_sv (cb, G_VOID | G_DISCARD | G_EVAL | G_KEEPERR);
2190 }
2182 2191
2183 SvREFCNT_dec (cb); 2192 SvREFCNT_dec (cb);
2184
2185 --count;
2186 } 2193 }
2187} 2194}
2188 2195
2189static void 2196static void
2190coro_semaphore_on_destroy (pTHX_ struct coro *coro) 2197coro_semaphore_on_destroy (pTHX_ struct coro *coro)
2272} 2279}
2273 2280
2274static void 2281static void
2275slf_init_semaphore_wait (pTHX_ struct CoroSLF *frame, CV *cv, SV **arg, int items) 2282slf_init_semaphore_wait (pTHX_ struct CoroSLF *frame, CV *cv, SV **arg, int items)
2276{ 2283{
2284 if (items >= 2)
2285 {
2286 /* callback form */
2287 AV *av = (AV *)SvRV (arg [0]);
2288 HV *st;
2289 GV *gvp;
2290 CV *cb_cv = sv_2cv (arg [1], &st, &gvp, 0);
2291
2292 av_push (av, (SV *)SvREFCNT_inc_NN (cb_cv));
2293
2294 if (SvIVX (AvARRAY (av)[0]) > 0)
2295 coro_semaphore_adjust (aTHX_ av, 0);
2296
2297 frame->prepare = prepare_nop;
2298 frame->check = slf_check_nop;
2299 }
2300 else
2301 {
2277 slf_init_semaphore_down_or_wait (aTHX_ frame, cv, arg, items); 2302 slf_init_semaphore_down_or_wait (aTHX_ frame, cv, arg, items);
2278 frame->check = slf_check_semaphore_wait; 2303 frame->check = slf_check_semaphore_wait;
2304 }
2279} 2305}
2280 2306
2281/* signal */ 2307/* signal */
2282 2308
2283static void 2309static void
2990 RETVAL = coro_new_rouse_cb (aTHX); 3016 RETVAL = coro_new_rouse_cb (aTHX);
2991 OUTPUT: 3017 OUTPUT:
2992 RETVAL 3018 RETVAL
2993 3019
2994void 3020void
2995rouse_wait (SV *cb = 0) 3021rouse_wait (...)
2996 PROTOTYPE: ;$ 3022 PROTOTYPE: ;$
2997 PPCODE: 3023 PPCODE:
2998 CORO_EXECUTE_SLF_XS (slf_init_rouse_wait); 3024 CORO_EXECUTE_SLF_XS (slf_init_rouse_wait);
2999 3025
3000 3026
3037 adjust = 1 3063 adjust = 1
3038 CODE: 3064 CODE:
3039 coro_semaphore_adjust (aTHX_ (AV *)SvRV (self), ix ? adjust : 1); 3065 coro_semaphore_adjust (aTHX_ (AV *)SvRV (self), ix ? adjust : 1);
3040 3066
3041void 3067void
3042down (SV *self) 3068down (...)
3043 CODE: 3069 CODE:
3044 CORO_EXECUTE_SLF_XS (slf_init_semaphore_down); 3070 CORO_EXECUTE_SLF_XS (slf_init_semaphore_down);
3045 3071
3046void 3072void
3047wait (SV *self) 3073wait (...)
3048 CODE: 3074 CODE:
3049 CORO_EXECUTE_SLF_XS (slf_init_semaphore_wait); 3075 CORO_EXECUTE_SLF_XS (slf_init_semaphore_wait);
3050 3076
3051void 3077void
3052try (SV *self) 3078try (SV *self)
3095 ); 3121 );
3096 OUTPUT: 3122 OUTPUT:
3097 RETVAL 3123 RETVAL
3098 3124
3099void 3125void
3100wait (SV *self) 3126wait (...)
3101 CODE: 3127 CODE:
3102 CORO_EXECUTE_SLF_XS (slf_init_signal_wait); 3128 CORO_EXECUTE_SLF_XS (slf_init_signal_wait);
3103 3129
3104void 3130void
3105broadcast (SV *self) 3131broadcast (SV *self)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines