Branch Coverage

lib/UV.xs
Criterion Covered Total %
branch 291 656 44.3


line true false branch
47 0 0 if (!handle || !arg) return;
0 0 if (!handle || !arg) return;
49 0 0 if (!cb || !SvOK(cb)) return;
0 0 if (!cb || !SvOK(cb)) return;
0 0 if (!cb || !SvOK(cb)) return;
0 0 if (!cb || !SvOK(cb)) return;
58 0 0 if (self && SvROK(self)) {
0 0 if (self && SvROK(self)) {
59 0 0 PUSHMARK(SP);
60 0 0 EXTEND(SP, 1);
67 0 0 FREETMPS;
74 85 0 if(cb && SvOK(cb)) {
10 75 if(cb && SvOK(cb)) {
10 0 if(cb && SvOK(cb)) {
0 10 if(cb && SvOK(cb)) {
75 6 69 if(*var)
81 75 10 if(*var && SvOK(*var))
0 75 if(*var && SvOK(*var))
0 0 if(*var && SvOK(*var))
0 0 if(*var && SvOK(*var))
90 1 9 SV *sv = newSVpv(err ? uv_strerror(err) : "", 0);
107 0 2 if(stash) return stash;
167 2 56 if(self->data)
169 17 41 if(self->on_close)
190 58 0 if(!handle || !handle->data) return;
0 58 if(!handle || !handle->data) return;
193 17 41 if(!(cb = self->on_close) || !SvOK(cb)) return;
0 17 if(!(cb = self->on_close) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_close) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_close) || !SvOK(cb)) return;
200 0 17 PUSHMARK(SP);
201 0 17 EXTEND(SP, 1);
207 17 0 FREETMPS;
238 3 4 if(self->on_read)
240 2 5 if(self->on_connection)
249 3 0 if(!stream || !stream->data) return;
0 3 if(!stream || !stream->data) return;
252 3 0 if((cb = self->on_read) && SvOK(cb)) {
0 3 if((cb = self->on_read) && SvOK(cb)) {
0 0 if((cb = self->on_read) && SvOK(cb)) {
0 0 if((cb = self->on_read) && SvOK(cb)) {
258 0 3 PUSHMARK(SP);
259 0 3 EXTEND(SP, 3);
261 0 3 mPUSHs(nread < 0 ? newSV_error(nread) : &PL_sv_undef);
262 3 0 if(nread >= 0)
268 3 0 FREETMPS;
272 3 0 if(buf && buf->base)
3 0 if(buf && buf->base)
281 2 0 if(!stream || !stream->data) return;
0 2 if(!stream || !stream->data) return;
284 2 0 if(!(cb = self->on_connection) || !SvOK(cb)) return;
0 2 if(!(cb = self->on_connection) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_connection) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_connection) || !SvOK(cb)) return;
291 0 2 PUSHMARK(SP);
292 0 2 EXTEND(SP, 2);
299 2 0 FREETMPS;
315 1 0 if(self->on_async)
324 1 0 if(!async || !async->data) return;
0 1 if(!async || !async->data) return;
327 1 0 if(!(cb = self->on_async) || !SvOK(cb)) return;
0 1 if(!(cb = self->on_async) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_async) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_async) || !SvOK(cb)) return;
334 0 1 PUSHMARK(SP);
335 0 1 EXTEND(SP, 1);
341 1 0 FREETMPS;
359 2 1 if(self->on_check)
368 2 0 if(!check || !check->data) return;
0 2 if(!check || !check->data) return;
371 2 0 if(!(cb = self->on_check) || !SvOK(cb)) return;
0 2 if(!(cb = self->on_check) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_check) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_check) || !SvOK(cb)) return;
378 0 2 PUSHMARK(SP);
379 0 2 EXTEND(SP, 1);
385 2 0 FREETMPS;
403 1 1 if(self->on_idle)
412 1 0 if(!idle || !idle->data) return;
0 1 if(!idle || !idle->data) return;
415 1 0 if(!(cb = self->on_idle) || !SvOK(cb)) return;
0 1 if(!(cb = self->on_idle) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_idle) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_idle) || !SvOK(cb)) return;
422 0 1 PUSHMARK(SP);
423 0 1 EXTEND(SP, 1);
429 1 0 FREETMPS;
464 2 1 if(self->on_poll)
473 2 0 if(!poll || !poll->data) return;
0 2 if(!poll || !poll->data) return;
476 2 0 if(!(cb = self->on_poll) || !SvOK(cb)) return;
0 2 if(!(cb = self->on_poll) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_poll) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_poll) || !SvOK(cb)) return;
483 0 2 PUSHMARK(SP);
484 0 2 EXTEND(SP, 3);
492 2 0 FREETMPS;
510 2 1 if(self->on_prepare)
519 2 0 if(!prepare || !prepare->data) return;
0 2 if(!prepare || !prepare->data) return;
522 2 0 if(!(cb = self->on_prepare) || !SvOK(cb)) return;
0 2 if(!(cb = self->on_prepare) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_prepare) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_prepare) || !SvOK(cb)) return;
529 0 2 PUSHMARK(SP);
530 0 2 EXTEND(SP, 1);
536 2 0 FREETMPS;
557 7 0 if(!process || !process->data) return;
0 7 if(!process || !process->data) return;
560 7 0 if(!(cb = self->on_exit) || !SvOK(cb)) return;
0 7 if(!(cb = self->on_exit) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_exit) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_exit) || !SvOK(cb)) return;
567 0 7 PUSHMARK(SP);
568 0 7 EXTEND(SP, 3);
576 7 0 FREETMPS;
595 1 1 if(self->on_signal)
604 1 0 if(!signal || !signal->data) return;
0 1 if(!signal || !signal->data) return;
607 1 0 if(!(cb = self->on_signal) || !SvOK(cb)) return;
0 1 if(!(cb = self->on_signal) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_signal) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_signal) || !SvOK(cb)) return;
614 0 1 PUSHMARK(SP);
615 0 1 EXTEND(SP, 2);
622 1 0 FREETMPS;
640 29 2 if(self->on_timer)
649 51 0 if(!timer || !timer->data) return;
0 51 if(!timer || !timer->data) return;
652 51 0 if(!(cb = self->on_timer) || !SvOK(cb)) return;
0 51 if(!(cb = self->on_timer) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_timer) || !SvOK(cb)) return;
0 0 if(!(cb = self->on_timer) || !SvOK(cb)) return;
659 0 51 PUSHMARK(SP);
660 0 51 EXTEND(SP, 1);
666 51 0 FREETMPS;
718 2 0 if(self->on_recv)
727 2 0 if(!udp || !udp->data) return;
0 2 if(!udp || !udp->data) return;
730 2 0 if((cb = self->on_recv) && SvOK(cb)) {
0 2 if((cb = self->on_recv) && SvOK(cb)) {
0 0 if((cb = self->on_recv) && SvOK(cb)) {
0 0 if((cb = self->on_recv) && SvOK(cb)) {
744 0 2 PUSHMARK(SP);
745 0 2 EXTEND(SP, 5);
747 0 2 mPUSHs(nread < 0 ? newSV_error(nread) : &PL_sv_undef);
748 2 0 if(nread >= 0)
758 2 0 FREETMPS;
762 2 0 if(buf && buf->base)
2 0 if(buf && buf->base)
821 7 1 if(req->cb) {
826 0 7 PUSHMARK(SP);
827 0 7 EXTEND(SP, 1);
833 7 0 FREETMPS;
891 0 2 PUSHMARK(SP);
892 0 2 EXTEND(SP, 1);
894 1 2 for(addrp = res; addrp; addrp = addrp->ai_next) {
896 0 1 STRLEN canonnamelen = addrp->ai_canonname ? strlen(addrp->ai_canonname) + 1 : 0;
905 0 1 if(canonnamelen) {
913 0 1 EXTEND(SP, 1);
921 2 0 FREETMPS;
942 0 1 PUSHMARK(SP);
943 0 1 EXTEND(SP, 3);
951 1 0 FREETMPS;
1172 1 0 RETVAL = SvIV(SvRV(self));
1184 25 45 if(!uv_is_closing(self->h))
1227 4 4 if(items > 1) {
1228 2 2 if(self->data)
1232 8 0 RETVAL = self->data ? newSVsv(self->data) : &PL_sv_undef;
1259 0 1 if (err != 0) {
1283 0 1 CHECKCALL(uv_async_send(self->h));
1296 0 3 if (err != 0) {
1320 0 2 CHECKCALL(uv_check_start(self->h, on_check_cb));
1325 0 4 CHECKCALL(uv_check_stop(self->h));
1338 0 2 if (err != 0) {
1362 0 1 CHECKCALL(uv_idle_start(self->h, on_idle_cb));
1367 0 2 CHECKCALL(uv_idle_stop(self->h));
1380 0 6 if (err != 0) {
1397 0 3 CHECKCALL(uv_pipe_open(self->h, fd));
1402 0 1 CHECKCALL(uv_pipe_bind(self->h, name));
1435 1 1 uv_pipe_getpeername(self->h, SvPVX(RETVAL), &len) :
1437 0 2 if(err != 0) {
1439 0 0 croak("Couldn't %s from pipe handle (%d): %s", (ix == 0) ? "getpeername" : "getsockname",
1451 0 0 CHECKCALL(uv_pipe_chmod(self->h, flags));
1463 1 3 if(is_socket)
1467 1 3 if (err != 0) {
1491 0 2 CHECKCALL(uv_poll_start(self->h, events, on_poll_cb));
1496 0 4 CHECKCALL(uv_poll_stop(self->h));
1509 0 3 if (err != 0) {
1533 0 2 CHECKCALL(uv_prepare_start(self->h, on_prepare_cb));
1538 0 4 CHECKCALL(uv_prepare_stop(self->h));
1579 7 0 if(!SvROK(args) || SvTYPE(SvRV(args)) != SVt_PVAV)
0 7 if(!SvROK(args) || SvTYPE(SvRV(args)) != SVt_PVAV)
1584 0 7 Newx(self->options.args, AvFILL(argsav) + 3, char *);
0 7 Newx(self->options.args, AvFILL(argsav) + 3, char *);
0 7 Newx(self->options.args, AvFILL(argsav) + 3, char *);
1586 0 21 for(i = 0; i <= AvFILL(argsav); i++)
14 7 for(i = 0; i <= AvFILL(argsav); i++)
1587 14 0 self->options.args[i+1] = savepv(SvPVbyte_nolen(AvARRAY(argsav)[i]));
1598 1 0 if(!SvROK(env) || SvTYPE(SvRV(env)) != SVt_PVHV)
0 1 if(!SvROK(env) || SvTYPE(SvRV(env)) != SVt_PVHV)
1604 0 1 Newx(self->options.env, nkeys + 1, char *);
1608 1 1 while((iter = hv_iternext(envhv))) {
1609 1 0 sv_setpvf(tmp, "%s=%s",
1625 1 0 if(self->options.stdio_count < (fd+1)) {
1627 1 0 if(n < (fd+1)) n = (fd+1);
1628 1 0 if(n < 3) n = 3;
1630 0 1 Renew(self->options.stdio, n, uv_stdio_container_t);
1632 3 1 for(i = self->options.stdio_count; i < n; i++)
1640 1 0 if(SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVHV) {
0 1 if(SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVHV) {
1644 0 1 if(!SvROK(fdarg)) {
1646 0 0 cont->data.fd = SvIV(arg);
1649 1 0 else if(SvTYPE(SvRV(fdarg)) == SVt_PVGV) {
1651 1 0 cont->data.fd = PerlIO_fileno(IoOFP(GvIO(SvRV(fdarg))));
0 1 cont->data.fd = PerlIO_fileno(IoOFP(GvIO(SvRV(fdarg))));
0 0 cont->data.fd = PerlIO_fileno(IoOFP(GvIO(SvRV(fdarg))));
1 0 cont->data.fd = PerlIO_fileno(IoOFP(GvIO(SvRV(fdarg))));
1678 0 7 if(!self->options.file)
1680 0 7 if(!self->options.args)
1683 7 0 if(!self->options.args[0])
1687 0 7 if (err != 0) {
1696 0 1 CHECKCALL(uv_process_kill(self->h, signum));
1716 0 2 if (err != 0) {
1741 0 1 CHECKCALL(uv_signal_start(self->h, on_signal_cb, self->signum));
1746 0 2 CHECKCALL(uv_signal_stop(self->h));
1767 0 2 CHECKCALL(uv_listen(self->h, backlog, on_connection_cb));
1772 0 2 CHECKCALL(uv_accept(self->h, client->h));
1785 0 2 if(err != 0) {
1801 0 3 CHECKCALL(uv_read_start(self->h, on_alloc_cb, on_read_cb));
1806 0 0 CHECKCALL(uv_read_stop(self->h));
1825 0 2 if(err != 0) {
1850 0 33 if (err != 0) {
1874 0 35 CHECKCALL(uv_timer_start(self->h, on_timer_cb, timeout, repeat));
1891 1 10 CHECKCALL(uv_timer_again(self->h));
1896 0 33 CHECKCALL(uv_timer_stop(self->h));
1909 0 5 if (err != 0) {
1926 0 2 CHECKCALL(uv_tcp_open(self->h, fd));
1931 0 0 CHECKCALL(uv_tcp_nodelay(self->h, enable));
1936 0 0 if(enable && items < 3)
0 0 if(enable && items < 3)
1939 0 0 CHECKCALL(uv_tcp_keepalive(self->h, enable, delay));
1944 0 0 CHECKCALL(uv_tcp_simultaneous_accepts(self->h, enable));
1949 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
1952 0 1 CHECKCALL(uv_tcp_bind(self->h, (struct sockaddr *)SvPVX(addr), flags));
1962 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
1988 1 1 uv_tcp_getpeername(self->h, (struct sockaddr *)SvPVX(RETVAL), &len) :
1990 0 2 if(err != 0) {
1992 0 0 croak("Couldn't %s from tcp handle (%d): %s", (ix == 0) ? "getpeername" : "getsockname",
2004 0 0 CHECKCALL(uv_tcp_close_reset(self->h, on_close_cb));
2017 0 0 if (err != 0) {
2034 0 0 CHECKCALL(uv_tty_set_mode(self->h, mode));
2041 0 0 CHECKCALL(uv_tty_get_winsize(self->h, &width, &height));
2042 0 0 EXTEND(SP, 2);
2058 0 5 if (err != 0) {
2082 0 2 CHECKCALL(uv_udp_open(self->h, fd));
2087 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2090 0 1 CHECKCALL(uv_udp_bind(self->h, (struct sockaddr *)SvPVX(addr), flags));
2095 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2098 0 1 CHECKCALL(uv_udp_connect(self->h, (struct sockaddr *)SvPVX(addr)));
2113 1 1 uv_udp_getpeername(self->h, (struct sockaddr *)SvPVX(RETVAL), &len) :
2115 0 2 if(err != 0) {
2117 0 0 croak("Couldn't %s from udp handle (%d): %s", (ix == 0) ? "getpeername" : "getsockname",
2129 0 2 CHECKCALL(uv_udp_recv_start(self->h, on_alloc_cb, on_recv_cb));
2134 0 0 CHECKCALL(uv_udp_recv_stop(self->h));
2146 0 2 if(items > 4)
2148 0 2 else if(items == 4) {
2152 1 1 else if(SvTYPE(SvRV(ST(2))) == SVt_PVCV) {
2161 1 1 if(addr) {
2162 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2178 0 2 if(err != 0) {
2184 1 1 if(cb)
2198 0 0 CHECKCALL(uv_udp_set_broadcast(self->h, on));
2203 0 0 CHECKCALL(uv_udp_set_ttl(self->h, ttl));
2208 0 0 CHECKCALL(uv_udp_set_multicast_loop(self->h, on));
2213 0 0 CHECKCALL(uv_udp_set_multicast_ttl(self->h, ttl));
2218 0 0 CHECKCALL(uv_udp_set_multicast_interface(self->h, SvPVbyte_nolen(ifaddr)));
0 0 CHECKCALL(uv_udp_set_multicast_interface(self->h, SvPVbyte_nolen(ifaddr)));
2223 0 0 CHECKCALL(uv_udp_set_membership(
0 0 CHECKCALL(uv_udp_set_membership(
0 0 CHECKCALL(uv_udp_set_membership(
2229 0 0 CHECKCALL(uv_udp_set_source_membership(
0 0 CHECKCALL(uv_udp_set_source_membership(
0 0 CHECKCALL(uv_udp_set_source_membership(
0 0 CHECKCALL(uv_udp_set_source_membership(
2240 0 1 if(items > 3)
2242 0 1 else if(items == 3) {
2249 0 1 if(addr) {
2250 0 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2260 0 1 if(err < 0) {
2285 4 26 Newxc(self, sizeof(struct UV__Loop) + (!want_default * sizeof(uv_loop_t)),
2289 26 4 if(want_default) {
2295 0 4 if(err != 0) {
2309 35 0 if(cb && SvOK(cb)) {
30 5 if(cb && SvOK(cb)) {
30 0 if(cb && SvOK(cb)) {
0 30 if(cb && SvOK(cb)) {
2310 4 1 if(self->on_walk)
2350 4 34 if(self->loop != uv_default_loop())
2356 0 1 CHECKCALL(uv_loop_configure(self->loop, option, value));
2399 2 0 hints.ai_flags = SvOK(flags) ? SvIV(flags) : (AI_V4MAPPED|AI_ADDRCONFIG);
2 0 hints.ai_flags = SvOK(flags) ? SvIV(flags) : (AI_V4MAPPED|AI_ADDRCONFIG);
0 2 hints.ai_flags = SvOK(flags) ? SvIV(flags) : (AI_V4MAPPED|AI_ADDRCONFIG);
0 0 hints.ai_flags = SvOK(flags) ? SvIV(flags) : (AI_V4MAPPED|AI_ADDRCONFIG);
2400 2 0 hints.ai_family = SvOK(family) ? SvIV(family) : AF_UNSPEC;
2 0 hints.ai_family = SvOK(family) ? SvIV(family) : AF_UNSPEC;
0 2 hints.ai_family = SvOK(family) ? SvIV(family) : AF_UNSPEC;
0 0 hints.ai_family = SvOK(family) ? SvIV(family) : AF_UNSPEC;
2401 1 1 hints.ai_socktype = SvOK(socktype) ? SvIV(socktype) : 0;
1 0 hints.ai_socktype = SvOK(socktype) ? SvIV(socktype) : 0;
0 1 hints.ai_socktype = SvOK(socktype) ? SvIV(socktype) : 0;
1 0 hints.ai_socktype = SvOK(socktype) ? SvIV(socktype) : 0;
2402 2 0 hints.ai_protocol = SvOK(protocol) ? SvIV(protocol) : 0;
2 0 hints.ai_protocol = SvOK(protocol) ? SvIV(protocol) : 0;
0 2 hints.ai_protocol = SvOK(protocol) ? SvIV(protocol) : 0;
0 0 hints.ai_protocol = SvOK(protocol) ? SvIV(protocol) : 0;
2406 0 2 if (err != 0) {
2428 1 0 err = uv_getnameinfo(self->loop, req->r, on_getnameinfo_cb,
2430 0 1 if (err != 0) {
2481 0 1 if((err != 0) && (err != UV_EBUSY))
0 0 if((err != 0) && (err != UV_EBUSY))
2514 0 0 case 1: RETVAL = self->canonname ? newSVpv(self->canonname, 0) : &PL_sv_undef; break;