Branch Coverage

Native.xs
Criterion Covered Total %
branch 149 278 53.6


line true false branch
45 0 0 if (*found) {
49 0 0 for (i=0; i < info->dlpi_phnum; i++) {
50 0 0 if (instr(info->dlpi_name, "libnss_files") != NULL) {
107 29 266 if (--self->active_threads_cnt == 0) {
118 280 34 if (!queued)
122 16 298 if (self->notify_on_begin)
125 0 314 if (arg->res->gai_error == EAI_SYSTEM)
130 18 296 if (arg->extra) self->extra_threads_cnt--;
134 280 34 if (!queued) DNS_on_thread_finish(self);
144 49 0 while (sem_wait(&self->semaphore) == 0) {
147 34 15 if (arg != NULL) self->busy_threads++;
150 15 34 if (arg == NULL) {
173 0 0 while (sem_wait(&self->semaphore) == 0) {
178 0 0 if (arg == NULL) {
185 0 0 if (!queue_size(self->in_queue) || (self->pool && self->busy_threads < self->pool)) {
0 0 if (!queue_size(self->in_queue) || (self->pool && self->busy_threads < self->pool)) {
0 0 if (!queue_size(self->in_queue) || (self->pool && self->busy_threads < self->pool)) {
191 0 0 if (stop)
200 48 284 if (queue_size(self->tout_queue)) {
205 48 48 while (!queue_iterator_end(it)) {
208 0 48 if (res == NULL) {
212 48 0 if (force || res->arg) {
9 39 if (force || res->arg) {
214 9 0 if (!res->gai_error && res->hostinfo)
9 0 if (!res->gai_error && res->hostinfo)
219 9 0 if (res->arg) {
220 9 0 if (res->arg->hints) free(res->arg->hints);
221 9 0 if (res->arg->host) Safefree(res->arg->host);
222 0 9 if (res->arg->service) Safefree(res->arg->service);
252 0 5 if (queue_size(DNS_instances) == 0) {
258 5 5 while (!queue_iterator_end(it)) {
261 3 2 if (self->pool) DNS_lock_semaphore(&self->semaphore);
268 0 3 if (queue_size(DNS_instances) == 0) {
274 3 3 while (!queue_iterator_end(it)) {
277 2 1 if (self->pool) DNS_unlock_semaphore(&self->semaphore);
287 1 1 for (i=0; ipool; i++) {
289 1 0 if (rc == 0) {
299 0 2 if (queue_size(DNS_instances) == 0) {
306 2 2 while (!queue_iterator_end(it)) {
309 1 1 if (self->pool) DNS_unlock_semaphore(&self->semaphore);
319 1 1 if (self->pool) {
343 0 16 if (items % 2 == 0)
362 15 16 for (i=1; i
363 15 0 opt = SvPV_nolen(ST(i));
365 9 6 if (strEQ(opt, "pool")) {
366 9 0 self->pool = SvIV(ST(i+1));
367 0 9 if (self->pool < 0) self->pool = 0;
369 3 3 else if (strEQ(opt, "extra_thread")) {
370 3 0 self->extra_thread = SvIV(ST(i+1));
372 3 0 else if (strEQ(opt, "notify_on_begin")) {
373 3 0 self->notify_on_begin = SvIV(ST(i+1));
376 0 0 warn("unsupported option: %s", SvPV_nolen(ST(i)));
383 0 16 if (rc != 0) {
389 0 16 if (rc != 0) {
394 0 16 if (rc != 0) {
401 0 16 if (rc != 0) {
409 5 11 if (DNS_instances == NULL) {
413 0 5 if (rc != 0) {
420 9 7 if (self->pool) {
421 0 9 if (sem_init(&self->semaphore, 0, 0) != 0) {
429 15 9 for (i=0; ipool; i++) {
431 15 0 if (rc == 0) {
440 0 9 if (j == 0) {
455 0 0 if (attr_ok) pthread_attr_destroy(&self->thread_attrs);
456 0 0 if (mutex_ok) pthread_mutex_destroy(&self->mutex);
457 0 0 if (cv_ok) pthread_cond_destroy(&self->cv);
458 0 0 if (sem_ok) sem_destroy(&self->semaphore);
478 0 314 if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, fd) != 0)
484 314 0 char *service = SvOK(sv_service) ? SvPV_nolen(sv_service) : "";
314 0 char *service = SvOK(sv_service) ? SvPV_nolen(sv_service) : "";
0 314 char *service = SvOK(sv_service) ? SvPV_nolen(sv_service) : "";
0 0 char *service = SvOK(sv_service) ? SvPV_nolen(sv_service) : "";
487 233 81 if (SvOK(sv_hints)) {
233 0 if (SvOK(sv_hints)) {
0 233 if (SvOK(sv_hints)) {
489 81 0 if (!SvROK(sv_hints) || SvTYPE(SvRV(sv_hints)) != SVt_PVHV) {
0 81 if (!SvROK(sv_hints) || SvTYPE(SvRV(sv_hints)) != SVt_PVHV) {
507 45 36 if (flags_ptr != NULL) {
508 45 0 hints->ai_flags = SvIV(*flags_ptr);
512 81 0 if (family_ptr != NULL) {
513 81 0 hints->ai_family = SvIV(*family_ptr);
517 81 0 if (socktype_ptr != NULL) {
518 81 0 hints->ai_socktype = SvIV(*socktype_ptr);
522 0 81 if (protocol_ptr != NULL) {
523 0 0 hints->ai_protocol = SvIV(*protocol_ptr);
538 314 0 arg->host = strlen(host) ? savepv(host) : NULL;
539 0 314 arg->service = strlen(service) ? savepv(service) : NULL;
548 52 262 if (self->pool) {
549 35 17 if (self->busy_threads == self->pool && (self->extra_thread || queue_size(self->tout_queue) > self->extra_threads_cnt)) {
20 15 if (self->busy_threads == self->pool && (self->extra_thread || queue_size(self->tout_queue) > self->extra_threads_cnt)) {
3 17 if (self->busy_threads == self->pool && (self->extra_thread || queue_size(self->tout_queue) > self->extra_threads_cnt)) {
561 52 262 if (!self->pool || arg->extra) {
18 34 if (!self->pool || arg->extra) {
566 280 0 if (rc == 0) {
572 0 0 if (arg->host) Safefree(arg->host);
573 0 0 if (arg->service) Safefree(arg->service);
576 0 0 if (hints) free(hints);
598 12 305 if (res == NULL) croak("attempt to get result which doesn't exists");
599 0 305 if (!res->arg) {
606 0 305 XPUSHs(sv_2mortal(newSViv(res->type)));
609 26 279 sv_setpv(err, res->gai_error ? gai_strerror(res->gai_error) : "");
610 0 305 if (res->gai_error == EAI_SYSTEM)
613 0 305 XPUSHs(sv_2mortal(err));
615 279 26 if (!res->gai_error) {
617 1389 279 for (info = res->hostinfo; info != NULL; info = info->ai_next) {
623 30 1359 hv_store(hv_info, "canonname", 9, info->ai_canonname ? newSVpv(info->ai_canonname, 0) : newSV(0), 0);
624 0 1389 XPUSHs(sv_2mortal(newRV_noinc((SV*)hv_info)));
627 279 0 if (res->hostinfo) freeaddrinfo(res->hostinfo);
632 72 233 if (res->arg->hints) free(res->arg->hints);
633 305 0 if (res->arg->host) Safefree(res->arg->host);
634 0 305 if (res->arg->service) Safefree(res->arg->service);
644 0 9 if (bstree_get(self->fd_map, fd) == NULL) {
652 0 9 if (unknown)
658 0 16 if (PERL_GET_THX != self->perl) {
663 9 7 if (self->pool) {
665 0 9 if (queue_size(self->in_queue) > 0) {
667 0 0 if (!PL_dirty)
673 0 0 while (!queue_iterator_end(it)) {
686 15 9 for (i=0; ipool; i++) {
693 9 16 while (self->active_threads_cnt != 0) {
700 0 16 if (bstree_size(self->fd_map) > 0) {
701 0 0 if (!PL_dirty)
707 0 0 for (i=0, l=bstree_size(self->fd_map); i
710 0 0 if (!res->dequeued) {
711 0 0 if (!res->gai_error && res->hostinfo) freeaddrinfo(res->hostinfo);
0 0 if (!res->gai_error && res->hostinfo) freeaddrinfo(res->hostinfo);
712 0 0 if (res->arg->hints) free(res->arg->hints);
713 0 0 if (res->arg->host) Safefree(res->arg->host);
714 0 0 if (res->arg->service) Safefree(res->arg->service);
727 16 0 while (!queue_iterator_end(it)) {
728 16 0 if (queue_at(DNS_instances, it) == self) {
736 9 7 if (self->in_queue) {
751 0 0 char *address = SvPV(sv_address, len);
752 0 0 if (len != 16)
760 0 0 XPUSHs(sv_2mortal(newSVpvn((char*) addr, sizeof(struct sockaddr_in6))));
766 6 0 char *addr = SvPV(sv_addr, len);
767 0 6 if (len != sizeof(struct sockaddr_in6))
771 0 6 XPUSHs(sv_2mortal(newSViv(struct_addr->sin6_port)));
772 0 6 XPUSHs(sv_2mortal(newSVpvn((char*)struct_addr->sin6_addr.s6_addr, 16)));