| line |
true |
false |
branch |
|
31
|
21 |
1080 |
if (!*(g->is_freed)) { |
|
79
|
24 |
0 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
|
0 |
24 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
83
|
20 |
4 |
if (ctx->is_freed_ptr) { |
|
87
|
4 |
20 |
if (ctx->shared_cv) { |
|
91
|
20 |
4 |
if (ctx->cvs) { |
|
93
|
6033 |
20 |
for (i = 0; i < ctx->num_cvs; i++) { |
|
94
|
6023 |
10 |
if (ctx->cvs[i]) { |
|
101
|
24 |
0 |
if (ctx->tasks) SvREFCNT_dec((SV*)ctx->tasks); |
|
102
|
24 |
0 |
if (ctx->final_cb) SvREFCNT_dec(ctx->final_cb); |
|
108
|
6127 |
0 |
SvREFCNT_inc_simple_void(cv); |
|
111
|
2 |
6125 |
if (!ctx) { |
|
115
|
6019 |
106 |
if (ctx->cvs) { |
|
119
|
17 |
6108 |
if (--ctx->remaining <= 0) { |
|
121
|
17 |
0 |
if (IS_PVCV(cb)) { |
|
|
16 |
1 |
if (IS_PVCV(cb)) { |
|
|
16 |
0 |
if (IS_PVCV(cb)) { |
|
127
|
0 |
16 |
PUSHMARK(SP); |
|
134
|
15 |
0 |
FREETMPS; |
|
144
|
31 |
0 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
|
0 |
31 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
148
|
26 |
5 |
if (ctx->is_freed_ptr) { |
|
152
|
8 |
23 |
if (ctx->current_cv) { |
|
156
|
31 |
0 |
if (ctx->tasks) SvREFCNT_dec((SV*)ctx->tasks); |
|
157
|
31 |
0 |
if (ctx->final_cb) SvREFCNT_dec(ctx->final_cb); |
|
165
|
5040 |
0 |
SvREFCNT_inc_simple_void(cv); |
|
168
|
3 |
5037 |
if (!ctx) { |
|
172
|
5031 |
6 |
if (!ctx->unsafe) { |
|
174
|
5031 |
0 |
if (ctx->current_cv == cv) { |
|
180
|
3 |
5034 |
if (items > 0 && SvTRUE(ST(0))) { |
|
|
3 |
0 |
if (items > 0 && SvTRUE(ST(0))) { |
|
188
|
5070 |
0 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
|
0 |
5070 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
191
|
5028 |
42 |
if (ctx->running) { |
|
199
|
5080 |
10 |
while (ctx->delayed) { |
|
201
|
5080 |
0 |
SV **task_ary = (AvREAL(ctx->tasks) && !SvMAGICAL(ctx->tasks)) ? AvARRAY(ctx->tasks) : NULL; |
|
|
5076 |
4 |
SV **task_ary = (AvREAL(ctx->tasks) && !SvMAGICAL(ctx->tasks)) ? AvARRAY(ctx->tasks) : NULL; |
|
202
|
26 |
5054 |
if (ctx->current_idx >= ctx->total_tasks) { |
|
204
|
26 |
0 |
if (IS_PVCV(cb)) { |
|
|
25 |
1 |
if (IS_PVCV(cb)) { |
|
|
25 |
0 |
if (IS_PVCV(cb)) { |
|
210
|
0 |
25 |
PUSHMARK(SP); |
|
214
|
23 |
0 |
FREETMPS; |
|
222
|
0 |
5051 |
SV **fetch_ptr = (task_ary && ctx->current_idx <= AvFILL(ctx->tasks)) |
|
|
5051 |
0 |
SV **fetch_ptr = (task_ary && ctx->current_idx <= AvFILL(ctx->tasks)) |
|
224
|
5051 |
3 |
: av_fetch(ctx->tasks, ctx->current_idx, 0); |
|
225
|
5054 |
0 |
SV *task_sv = fetch_ptr ? *fetch_ptr : NULL; |
|
229
|
5052 |
2 |
if (IS_PVCV(task_sv)) { |
|
|
5043 |
9 |
if (IS_PVCV(task_sv)) { |
|
|
5043 |
0 |
if (IS_PVCV(task_sv)) { |
|
230
|
5037 |
6 |
if (!ctx->unsafe) { |
|
231
|
0 |
5037 |
if (ctx->current_cv) { |
|
238
|
4 |
2 |
} else if (!ctx->current_cv) { |
|
247
|
5037 |
6 |
if (!ctx->unsafe) { |
|
252
|
0 |
5043 |
PUSHMARK(SP); |
|
253
|
0 |
5043 |
XPUSHs(next_rv); |
|
256
|
6 |
5037 |
U32 flags = G_DISCARD | (ctx->unsafe ? 0 : G_EVAL); |
|
259
|
5037 |
5 |
if (!ctx->unsafe) { |
|
261
|
5037 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
5 |
5032 |
if (SvTRUE(ERRSV)) { |
|
262
|
5 |
0 |
SV *err = sv_mortalcopy(ERRSV); |
|
268
|
5037 |
0 |
FREETMPS; |
|
270
|
0 |
5037 |
if (!*ctx_ptr) return; |
|
276
|
10 |
0 |
if (*ctx_ptr) (*ctx_ptr)->running = 0; |
|
280
|
25 |
0 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
|
0 |
25 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
284
|
21 |
4 |
if (ctx->is_freed_ptr) { |
|
288
|
4 |
21 |
if (ctx->shared_cv) { |
|
292
|
21 |
4 |
if (ctx->cvs) { |
|
294
|
1049 |
21 |
for (i = 0; i < ctx->num_cvs; i++) { |
|
295
|
1037 |
12 |
if (ctx->cvs[i]) { |
|
302
|
25 |
0 |
if (ctx->tasks) SvREFCNT_dec((SV*)ctx->tasks); |
|
303
|
25 |
0 |
if (ctx->final_cb) SvREFCNT_dec(ctx->final_cb); |
|
311
|
1142 |
0 |
SvREFCNT_inc_simple_void(cv); |
|
314
|
2 |
1140 |
if (!ctx) { |
|
318
|
1033 |
107 |
if (ctx->cvs) { |
|
324
|
17 |
1123 |
if (--ctx->remaining <= 0) { |
|
326
|
17 |
0 |
if (IS_PVCV(cb)) { |
|
|
16 |
1 |
if (IS_PVCV(cb)) { |
|
|
16 |
0 |
if (IS_PVCV(cb)) { |
|
332
|
0 |
16 |
PUSHMARK(SP); |
|
339
|
15 |
0 |
FREETMPS; |
|
351
|
1148 |
0 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
|
0 |
1148 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
354
|
1111 |
37 |
if (ctx->running) { |
|
366
|
37 |
15 |
while (ctx->delayed) { |
|
369
|
1171 |
0 |
while (!is_freed && ctx->active < ctx->limit && ctx->current_idx < ctx->total_tasks) { |
|
|
1160 |
11 |
while (!is_freed && ctx->active < ctx->limit && ctx->current_idx < ctx->total_tasks) { |
|
|
1156 |
4 |
while (!is_freed && ctx->active < ctx->limit && ctx->current_idx < ctx->total_tasks) { |
|
370
|
1156 |
0 |
SV **task_ary = (AvREAL(ctx->tasks) && !SvMAGICAL(ctx->tasks)) ? AvARRAY(ctx->tasks) : NULL; |
|
|
1153 |
3 |
SV **task_ary = (AvREAL(ctx->tasks) && !SvMAGICAL(ctx->tasks)) ? AvARRAY(ctx->tasks) : NULL; |
|
371
|
0 |
1153 |
SV **fetch_ptr = (task_ary && ctx->current_idx <= AvFILL(ctx->tasks)) |
|
|
1153 |
0 |
SV **fetch_ptr = (task_ary && ctx->current_idx <= AvFILL(ctx->tasks)) |
|
373
|
1153 |
3 |
: av_fetch(ctx->tasks, ctx->current_idx, 0); |
|
374
|
1156 |
0 |
SV *task_sv = fetch_ptr ? *fetch_ptr : NULL; |
|
378
|
1154 |
2 |
if (IS_PVCV(task_sv)) { |
|
|
1144 |
10 |
if (IS_PVCV(task_sv)) { |
|
|
1144 |
0 |
if (IS_PVCV(task_sv)) { |
|
383
|
1037 |
107 |
if (!ctx->unsafe) { |
|
394
|
1037 |
107 |
if (!ctx->unsafe) { |
|
399
|
0 |
1144 |
PUSHMARK(SP); |
|
400
|
0 |
1144 |
XPUSHs(done_rv); |
|
403
|
107 |
1037 |
U32 flags = G_DISCARD | (task_unsafe ? 0 : G_EVAL); |
|
406
|
1037 |
106 |
if (!task_unsafe) { |
|
408
|
1037 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
5 |
1032 |
if (SvTRUE(ERRSV)) { |
|
409
|
5 |
0 |
SV *err = sv_mortalcopy(ERRSV); |
|
410
|
4 |
1 |
if (!is_freed) { |
|
413
|
5 |
0 |
if (old_is_freed_ptr) *old_is_freed_ptr = 1; |
|
418
|
1138 |
0 |
FREETMPS; |
|
420
|
12 |
1126 |
if (is_freed) goto done; |
|
422
|
4 |
8 |
if (--ctx->remaining <= 0) { |
|
424
|
4 |
0 |
if (IS_PVCV(cb)) { |
|
|
4 |
0 |
if (IS_PVCV(cb)) { |
|
|
4 |
0 |
if (IS_PVCV(cb)) { |
|
430
|
0 |
4 |
PUSHMARK(SP); |
|
433
|
4 |
0 |
if (old_is_freed_ptr) *old_is_freed_ptr = 1; |
|
435
|
3 |
0 |
FREETMPS; |
|
439
|
0 |
0 |
if (old_is_freed_ptr) *old_is_freed_ptr = 1; |
|
448
|
0 |
15 |
if (!is_freed) { |
|
453
|
15 |
15 |
if (is_freed && old_is_freed_ptr) { |
|
|
15 |
0 |
if (is_freed && old_is_freed_ptr) { |
|
459
|
1018 |
0 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
|
0 |
1018 |
if (!ctx_ptr || !*ctx_ptr) return; |
|
463
|
1013 |
5 |
if (ctx->is_freed_ptr) { |
|
467
|
4 |
1014 |
if (ctx->shared_cv) { |
|
471
|
1014 |
4 |
if (ctx->cvs) { |
|
473
|
2026 |
1014 |
for (i = 0; i < ctx->num_cvs; i++) { |
|
474
|
1017 |
1009 |
if (ctx->cvs[i]) { |
|
481
|
1018 |
0 |
if (ctx->tasks) SvREFCNT_dec((SV*)ctx->tasks); |
|
482
|
1018 |
0 |
if (ctx->final_cb) SvREFCNT_dec(ctx->final_cb); |
|
488
|
1019 |
0 |
SvREFCNT_inc_simple_void(cv); |
|
491
|
1014 |
5 |
if (!ctx || ctx->settled) { |
|
|
0 |
1014 |
if (!ctx || ctx->settled) { |
|
496
|
1010 |
4 |
if (ctx->cvs) { |
|
501
|
1014 |
0 |
if (IS_PVCV(cb)) { |
|
|
1013 |
1 |
if (IS_PVCV(cb)) { |
|
|
1013 |
0 |
if (IS_PVCV(cb)) { |
|
508
|
0 |
1013 |
PUSHMARK(SP); |
|
509
|
1013 |
1013 |
for (I32 i = 0; i < items; i++) { |
|
510
|
0 |
1013 |
XPUSHs(sv_mortalcopy(ST(i))); |
|
518
|
1012 |
0 |
FREETMPS; |
|
531
|
0 |
8 |
I_EV_API ("EV::Future"); |
|
|
8 |
0 |
I_EV_API ("EV::Future"); |
|
|
0 |
8 |
I_EV_API ("EV::Future"); |
|
539
|
4 |
22 |
if (items > 2 && SvTRUE(ST(2))) unsafe = 1; |
|
|
4 |
0 |
if (items > 2 && SvTRUE(ST(2))) unsafe = 1; |
|
542
|
1 |
25 |
if (len <= 0) { |
|
543
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
547
|
0 |
1 |
PUSHMARK(SP); |
|
550
|
0 |
1 |
FREETMPS; |
|
578
|
4 |
21 |
if (unsafe) { |
|
590
|
4 |
21 |
U32 flags = G_DISCARD | (unsafe ? 0 : G_EVAL); |
|
592
|
6141 |
16 |
for (i = 0; i < len; i++) { |
|
593
|
0 |
6141 |
if (*is_freed) break; |
|
595
|
6141 |
0 |
SV **task_ary = (AvREAL(tasks) && !SvMAGICAL(tasks)) ? AvARRAY(tasks) : NULL; |
|
|
6138 |
3 |
SV **task_ary = (AvREAL(tasks) && !SvMAGICAL(tasks)) ? AvARRAY(tasks) : NULL; |
|
596
|
0 |
6138 |
SV **fetch_ptr = (task_ary && i <= AvFILL(tasks)) |
|
|
6137 |
1 |
SV **fetch_ptr = (task_ary && i <= AvFILL(tasks)) |
|
598
|
6138 |
3 |
: av_fetch(tasks, i, 0); |
|
599
|
6140 |
1 |
SV *task_sv = fetch_ptr ? *fetch_ptr : NULL; |
|
601
|
6138 |
3 |
if (IS_PVCV(task_sv)) { |
|
|
6130 |
8 |
if (IS_PVCV(task_sv)) { |
|
|
6130 |
0 |
if (IS_PVCV(task_sv)) { |
|
603
|
6024 |
106 |
if (!unsafe) { |
|
611
|
6024 |
106 |
if (!unsafe) { |
|
614
|
0 |
6130 |
PUSHMARK(SP); |
|
615
|
0 |
6130 |
XPUSHs(done_rv); |
|
620
|
6024 |
105 |
if (!unsafe) { |
|
621
|
6024 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
4 |
6020 |
if (SvTRUE(ERRSV)) { |
|
622
|
4 |
0 |
SV *err = sv_mortalcopy(ERRSV); |
|
623
|
3 |
1 |
if (!*is_freed) { |
|
630
|
6020 |
105 |
FREETMPS; |
|
633
|
4 |
7 |
if (--ctx->remaining <= 0) { |
|
635
|
4 |
0 |
if (IS_PVCV(cb)) { |
|
|
4 |
0 |
if (IS_PVCV(cb)) { |
|
|
4 |
0 |
if (IS_PVCV(cb)) { |
|
640
|
0 |
4 |
PUSHMARK(SP); |
|
644
|
3 |
0 |
FREETMPS; |
|
661
|
4 |
30 |
if (items > 2 && SvTRUE(ST(2))) unsafe = 1; |
|
|
4 |
0 |
if (items > 2 && SvTRUE(ST(2))) unsafe = 1; |
|
664
|
1 |
33 |
if (len <= 0) { |
|
665
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
669
|
0 |
1 |
PUSHMARK(SP); |
|
672
|
0 |
1 |
FREETMPS; |
|
712
|
4 |
22 |
if (items > 3 && SvTRUE(ST(3))) unsafe = 1; |
|
|
4 |
0 |
if (items > 3 && SvTRUE(ST(3))) unsafe = 1; |
|
715
|
1 |
25 |
if (len <= 0) { |
|
716
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
720
|
0 |
1 |
PUSHMARK(SP); |
|
723
|
0 |
1 |
FREETMPS; |
|
729
|
1 |
24 |
if (limit < 1) limit = 1; |
|
730
|
9 |
16 |
if (limit > len) limit = len; |
|
760
|
4 |
21 |
if (unsafe) { |
|
778
|
4 |
1016 |
if (items > 2 && SvTRUE(ST(2))) unsafe = 1; |
|
|
4 |
0 |
if (items > 2 && SvTRUE(ST(2))) unsafe = 1; |
|
781
|
2 |
1018 |
if (len <= 0) { |
|
782
|
2 |
0 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
1 |
if (IS_PVCV(final_cb)) { |
|
|
1 |
0 |
if (IS_PVCV(final_cb)) { |
|
786
|
0 |
1 |
PUSHMARK(SP); |
|
789
|
0 |
1 |
FREETMPS; |
|
817
|
4 |
1014 |
if (unsafe) { |
|
829
|
4 |
1014 |
U32 flags = G_DISCARD | (unsafe ? 0 : G_EVAL); |
|
831
|
2029 |
8 |
for (i = 0; i < len; i++) { |
|
832
|
1025 |
1004 |
if (*is_freed || ctx->settled) break; |
|
|
1025 |
0 |
if (*is_freed || ctx->settled) break; |
|
834
|
1025 |
0 |
SV **task_ary = (AvREAL(tasks) && !SvMAGICAL(tasks)) ? AvARRAY(tasks) : NULL; |
|
|
1025 |
0 |
SV **task_ary = (AvREAL(tasks) && !SvMAGICAL(tasks)) ? AvARRAY(tasks) : NULL; |
|
835
|
0 |
1025 |
SV **fetch_ptr = (task_ary && i <= AvFILL(tasks)) |
|
|
1025 |
0 |
SV **fetch_ptr = (task_ary && i <= AvFILL(tasks)) |
|
837
|
1025 |
0 |
: av_fetch(tasks, i, 0); |
|
838
|
1025 |
0 |
SV *task_sv = fetch_ptr ? *fetch_ptr : NULL; |
|
840
|
1024 |
1 |
if (IS_PVCV(task_sv)) { |
|
|
1023 |
1 |
if (IS_PVCV(task_sv)) { |
|
|
1023 |
0 |
if (IS_PVCV(task_sv)) { |
|
842
|
1017 |
6 |
if (!unsafe) { |
|
850
|
1017 |
6 |
if (!unsafe) { |
|
853
|
0 |
1023 |
PUSHMARK(SP); |
|
854
|
0 |
1023 |
XPUSHs(done_rv); |
|
859
|
1017 |
5 |
if (!unsafe) { |
|
860
|
1017 |
0 |
if (SvTRUE(ERRSV)) { |
|
|
3 |
1014 |
if (SvTRUE(ERRSV)) { |
|
861
|
3 |
0 |
SV *err = sv_mortalcopy(ERRSV); |
|
862
|
2 |
1 |
if (!*is_freed) { |
|
869
|
1014 |
5 |
FREETMPS; |
|
874
|
2 |
0 |
if (IS_PVCV(cb)) { |
|
|
2 |
0 |
if (IS_PVCV(cb)) { |
|
|
2 |
0 |
if (IS_PVCV(cb)) { |
|
879
|
0 |
2 |
PUSHMARK(SP); |
|
883
|
2 |
0 |
FREETMPS; |