Branch Coverage

lib/UV.xs
Criterion Covered Total %
branch 263 626 42.0


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)) {
80 75 10 if(*var && SvOK(*var))
0 75 if(*var && SvOK(*var))
0 0 if(*var && SvOK(*var))
0 0 if(*var && SvOK(*var))
89 1 9 SV *sv = newSVpv(err ? uv_strerror(err) : "", 0);
106 0 2 if(stash) return stash;
187 58 0 if(!handle || !handle->data) return;
0 58 if(!handle || !handle->data) return;
190 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;
197 0 17 PUSHMARK(SP);
198 0 17 EXTEND(SP, 1);
204 17 0 FREETMPS;
244 3 0 if(!stream || !stream->data) return;
0 3 if(!stream || !stream->data) return;
247 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)) {
253 0 3 PUSHMARK(SP);
254 0 3 EXTEND(SP, 3);
256 0 3 mPUSHs(nread < 0 ? newSV_error(nread) : &PL_sv_undef);
257 3 0 if(nread >= 0)
263 3 0 FREETMPS;
267 3 0 if(buf && buf->base)
3 0 if(buf && buf->base)
276 2 0 if(!stream || !stream->data) return;
0 2 if(!stream || !stream->data) return;
279 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;
286 0 2 PUSHMARK(SP);
287 0 2 EXTEND(SP, 2);
294 2 0 FREETMPS;
318 1 0 if(!async || !async->data) return;
0 1 if(!async || !async->data) return;
321 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;
328 0 1 PUSHMARK(SP);
329 0 1 EXTEND(SP, 1);
335 1 0 FREETMPS;
361 2 0 if(!check || !check->data) return;
0 2 if(!check || !check->data) return;
364 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;
371 0 2 PUSHMARK(SP);
372 0 2 EXTEND(SP, 1);
378 2 0 FREETMPS;
404 1 0 if(!idle || !idle->data) return;
0 1 if(!idle || !idle->data) return;
407 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;
414 0 1 PUSHMARK(SP);
415 0 1 EXTEND(SP, 1);
421 1 0 FREETMPS;
464 2 0 if(!poll || !poll->data) return;
0 2 if(!poll || !poll->data) return;
467 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;
474 0 2 PUSHMARK(SP);
475 0 2 EXTEND(SP, 3);
483 2 0 FREETMPS;
509 2 0 if(!prepare || !prepare->data) return;
0 2 if(!prepare || !prepare->data) return;
512 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;
519 0 2 PUSHMARK(SP);
520 0 2 EXTEND(SP, 1);
526 2 0 FREETMPS;
547 7 0 if(!process || !process->data) return;
0 7 if(!process || !process->data) return;
550 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;
557 0 7 PUSHMARK(SP);
558 0 7 EXTEND(SP, 3);
566 7 0 FREETMPS;
593 1 0 if(!signal || !signal->data) return;
0 1 if(!signal || !signal->data) return;
596 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;
603 0 1 PUSHMARK(SP);
604 0 1 EXTEND(SP, 2);
611 1 0 FREETMPS;
637 51 0 if(!timer || !timer->data) return;
0 51 if(!timer || !timer->data) return;
640 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;
647 0 51 PUSHMARK(SP);
648 0 51 EXTEND(SP, 1);
654 51 0 FREETMPS;
714 2 0 if(!udp || !udp->data) return;
0 2 if(!udp || !udp->data) return;
717 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)) {
731 0 2 PUSHMARK(SP);
732 0 2 EXTEND(SP, 5);
734 0 2 mPUSHs(nread < 0 ? newSV_error(nread) : &PL_sv_undef);
735 2 0 if(nread >= 0)
745 2 0 FREETMPS;
749 2 0 if(buf && buf->base)
2 0 if(buf && buf->base)
808 7 1 if(req->cb) {
813 0 7 PUSHMARK(SP);
814 0 7 EXTEND(SP, 1);
820 7 0 FREETMPS;
878 0 2 PUSHMARK(SP);
879 0 2 EXTEND(SP, 1);
881 1 2 for(addrp = res; addrp; addrp = addrp->ai_next) {
883 0 1 STRLEN canonnamelen = addrp->ai_canonname ? strlen(addrp->ai_canonname) + 1 : 0;
892 0 1 if(canonnamelen) {
900 0 1 EXTEND(SP, 1);
908 2 0 FREETMPS;
929 0 1 PUSHMARK(SP);
930 0 1 EXTEND(SP, 3);
938 1 0 FREETMPS;
1159 1 0 RETVAL = SvIV(SvRV(self));
1171 25 45 if(!uv_is_closing(self->h))
1214 4 4 if(items > 1) {
1218 8 0 RETVAL = self->data ? newSVsv(self->data) : &PL_sv_undef;
1245 0 1 if (err != 0) {
1269 0 1 CHECKCALL(uv_async_send(self->h));
1282 0 3 if (err != 0) {
1306 0 2 CHECKCALL(uv_check_start(self->h, on_check_cb));
1311 0 4 CHECKCALL(uv_check_stop(self->h));
1324 0 2 if (err != 0) {
1348 0 1 CHECKCALL(uv_idle_start(self->h, on_idle_cb));
1353 0 2 CHECKCALL(uv_idle_stop(self->h));
1366 0 6 if (err != 0) {
1383 0 3 CHECKCALL(uv_pipe_open(self->h, fd));
1388 0 1 CHECKCALL(uv_pipe_bind(self->h, name));
1421 1 1 uv_pipe_getpeername(self->h, SvPVX(RETVAL), &len) :
1423 0 2 if(err != 0) {
1425 0 0 croak("Couldn't %s from pipe handle (%d): %s", (ix == 0) ? "getpeername" : "getsockname",
1437 0 0 CHECKCALL(uv_pipe_chmod(self->h, flags));
1449 1 3 if(is_socket)
1453 1 3 if (err != 0) {
1477 0 2 CHECKCALL(uv_poll_start(self->h, events, on_poll_cb));
1482 0 4 CHECKCALL(uv_poll_stop(self->h));
1495 0 3 if (err != 0) {
1519 0 2 CHECKCALL(uv_prepare_start(self->h, on_prepare_cb));
1524 0 4 CHECKCALL(uv_prepare_stop(self->h));
1568 7 0 if(!SvROK(args) || SvTYPE(SvRV(args)) != SVt_PVAV)
0 7 if(!SvROK(args) || SvTYPE(SvRV(args)) != SVt_PVAV)
1573 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 *);
1575 0 21 for(i = 0; i <= AvFILL(argsav); i++)
14 7 for(i = 0; i <= AvFILL(argsav); i++)
1576 14 0 self->options.args[i+1] = savepv(SvPVbyte_nolen(AvARRAY(argsav)[i]));
1587 1 0 if(!SvROK(env) || SvTYPE(SvRV(env)) != SVt_PVHV)
0 1 if(!SvROK(env) || SvTYPE(SvRV(env)) != SVt_PVHV)
1593 0 1 Newx(self->options.env, nkeys + 1, char *);
1597 1 1 while((iter = hv_iternext(envhv))) {
1598 1 0 sv_setpvf(tmp, "%s=%s",
1614 1 0 if(self->options.stdio_count < (fd+1)) {
1616 1 0 if(n < (fd+1)) n = (fd+1);
1617 1 0 if(n < 3) n = 3;
1619 0 1 Renew(self->options.stdio, n, uv_stdio_container_t);
1621 3 1 for(i = self->options.stdio_count; i < n; i++)
1629 1 0 if(SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVHV) {
0 1 if(SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVHV) {
1633 0 1 if(!SvROK(fdarg)) {
1635 0 0 cont->data.fd = SvIV(arg);
1638 1 0 else if(SvTYPE(SvRV(fdarg)) == SVt_PVGV) {
1640 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))));
1667 0 7 if(!self->options.file)
1669 0 7 if(!self->options.args)
1672 7 0 if(!self->options.args[0])
1676 0 7 if (err != 0) {
1683 0 1 CHECKCALL(uv_process_kill(self->h, signum));
1703 0 2 if (err != 0) {
1728 0 1 CHECKCALL(uv_signal_start(self->h, on_signal_cb, self->signum));
1733 0 2 CHECKCALL(uv_signal_stop(self->h));
1754 0 2 CHECKCALL(uv_listen(self->h, backlog, on_connection_cb));
1759 0 2 CHECKCALL(uv_accept(self->h, client->h));
1772 0 2 if(err != 0) {
1788 0 3 CHECKCALL(uv_read_start(self->h, on_alloc_cb, on_read_cb));
1793 0 0 CHECKCALL(uv_read_stop(self->h));
1812 0 2 if(err != 0) {
1837 0 33 if (err != 0) {
1861 0 35 CHECKCALL(uv_timer_start(self->h, on_timer_cb, timeout, repeat));
1878 1 10 CHECKCALL(uv_timer_again(self->h));
1883 0 33 CHECKCALL(uv_timer_stop(self->h));
1896 0 5 if (err != 0) {
1913 0 2 CHECKCALL(uv_tcp_open(self->h, fd));
1918 0 0 CHECKCALL(uv_tcp_nodelay(self->h, enable));
1923 0 0 if(enable && items < 3)
0 0 if(enable && items < 3)
1926 0 0 CHECKCALL(uv_tcp_keepalive(self->h, enable, delay));
1931 0 0 CHECKCALL(uv_tcp_simultaneous_accepts(self->h, enable));
1936 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
1939 0 1 CHECKCALL(uv_tcp_bind(self->h, (struct sockaddr *)SvPVX(addr), flags));
1949 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
1975 1 1 uv_tcp_getpeername(self->h, (struct sockaddr *)SvPVX(RETVAL), &len) :
1977 0 2 if(err != 0) {
1979 0 0 croak("Couldn't %s from tcp handle (%d): %s", (ix == 0) ? "getpeername" : "getsockname",
1991 0 0 CHECKCALL(uv_tcp_close_reset(self->h, on_close_cb));
2004 0 0 if (err != 0) {
2021 0 0 CHECKCALL(uv_tty_set_mode(self->h, mode));
2028 0 0 CHECKCALL(uv_tty_get_winsize(self->h, &width, &height));
2029 0 0 EXTEND(SP, 2);
2045 0 5 if (err != 0) {
2069 0 2 CHECKCALL(uv_udp_open(self->h, fd));
2074 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2077 0 1 CHECKCALL(uv_udp_bind(self->h, (struct sockaddr *)SvPVX(addr), flags));
2082 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2085 0 1 CHECKCALL(uv_udp_connect(self->h, (struct sockaddr *)SvPVX(addr)));
2100 1 1 uv_udp_getpeername(self->h, (struct sockaddr *)SvPVX(RETVAL), &len) :
2102 0 2 if(err != 0) {
2104 0 0 croak("Couldn't %s from udp handle (%d): %s", (ix == 0) ? "getpeername" : "getsockname",
2116 0 2 CHECKCALL(uv_udp_recv_start(self->h, on_alloc_cb, on_recv_cb));
2121 0 0 CHECKCALL(uv_udp_recv_stop(self->h));
2133 0 2 if(items > 4)
2135 0 2 else if(items == 4) {
2139 1 1 else if(SvTYPE(SvRV(ST(2))) == SVt_PVCV) {
2148 1 1 if(addr) {
2149 1 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 1 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2165 0 2 if(err != 0) {
2171 1 1 if(cb)
2185 0 0 CHECKCALL(uv_udp_set_broadcast(self->h, on));
2190 0 0 CHECKCALL(uv_udp_set_ttl(self->h, ttl));
2195 0 0 CHECKCALL(uv_udp_set_multicast_loop(self->h, on));
2200 0 0 CHECKCALL(uv_udp_set_multicast_ttl(self->h, ttl));
2205 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)));
2210 0 0 CHECKCALL(uv_udp_set_membership(
0 0 CHECKCALL(uv_udp_set_membership(
0 0 CHECKCALL(uv_udp_set_membership(
2216 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(
2227 0 1 if(items > 3)
2229 0 1 else if(items == 3) {
2236 0 1 if(addr) {
2237 0 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
0 0 if(!SvPOK(addr) || SvCUR(addr) < sizeof(struct sockaddr))
2247 0 1 if(err < 0) {
2272 4 26 Newxc(self, sizeof(struct UV__Loop) + (!want_default * sizeof(uv_loop_t)),
2276 26 4 if(want_default) {
2282 0 4 if(err != 0) {
2296 35 0 if(cb && SvOK(cb)) {
30 5 if(cb && SvOK(cb)) {
30 0 if(cb && SvOK(cb)) {
0 30 if(cb && SvOK(cb)) {
2336 4 34 if(self->loop != uv_default_loop())
2342 0 1 CHECKCALL(uv_loop_configure(self->loop, option, value));
2385 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);
2386 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;
2387 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;
2388 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;
2392 0 2 if (err != 0) {
2414 1 0 err = uv_getnameinfo(self->loop, req->r, on_getnameinfo_cb,
2416 0 1 if (err != 0) {
2467 0 1 if((err != 0) && (err != UV_EBUSY))
0 0 if((err != 0) && (err != UV_EBUSY))
2500 0 0 case 1: RETVAL = self->canonname ? newSVpv(self->canonname, 0) : &PL_sv_undef; break;