comparison src/core/ngx_resolver.c @ 6457:a6711b85da83

Resolver: do not enable resolve timer if provided timeout is zero.
author Dmitry Volyntsev <xeioex@nginx.com>
date Wed, 23 Mar 2016 17:44:36 +0300
parents c94aba230a5a
children 384154fc634f
comparison
equal deleted inserted replaced
6456:c94aba230a5a 6457:a6711b85da83
609 return NGX_OK; 609 return NGX_OK;
610 } 610 }
611 611
612 if (rn->waiting) { 612 if (rn->waiting) {
613 613
614 if (ctx->event == NULL) { 614 if (ctx->event == NULL && ctx->timeout) {
615 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); 615 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
616 if (ctx->event == NULL) { 616 if (ctx->event == NULL) {
617 return NGX_ERROR; 617 return NGX_ERROR;
618 } 618 }
619 619
727 727
728 if (ngx_resolver_send_query(r, rn) != NGX_OK) { 728 if (ngx_resolver_send_query(r, rn) != NGX_OK) {
729 goto failed; 729 goto failed;
730 } 730 }
731 731
732 if (ctx->event == NULL) { 732 if (ctx->event == NULL && ctx->timeout) {
733 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); 733 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
734 if (ctx->event == NULL) { 734 if (ctx->event == NULL) {
735 goto failed; 735 goto failed;
736 } 736 }
737 737
870 return NGX_OK; 870 return NGX_OK;
871 } 871 }
872 872
873 if (rn->waiting) { 873 if (rn->waiting) {
874 874
875 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); 875 if (ctx->event == NULL && ctx->timeout) {
876 if (ctx->event == NULL) { 876 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
877 return NGX_ERROR; 877 if (ctx->event == NULL) {
878 } 878 return NGX_ERROR;
879 879 }
880 ctx->event->handler = ngx_resolver_timeout_handler; 880
881 ctx->event->data = ctx; 881 ctx->event->handler = ngx_resolver_timeout_handler;
882 ctx->event->log = r->log; 882 ctx->event->data = ctx;
883 ctx->ident = -1; 883 ctx->event->log = r->log;
884 884 ctx->ident = -1;
885 ngx_add_timer(ctx->event, ctx->timeout); 885
886 ngx_add_timer(ctx->event, ctx->timeout);
887 }
886 888
887 ctx->next = rn->waiting; 889 ctx->next = rn->waiting;
888 rn->waiting = ctx; 890 rn->waiting = ctx;
889 ctx->state = NGX_AGAIN; 891 ctx->state = NGX_AGAIN;
890 ctx->node = rn; 892 ctx->node = rn;
947 949
948 if (ngx_resolver_send_query(r, rn) != NGX_OK) { 950 if (ngx_resolver_send_query(r, rn) != NGX_OK) {
949 goto failed; 951 goto failed;
950 } 952 }
951 953
952 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); 954 if (ctx->event == NULL && ctx->timeout) {
953 if (ctx->event == NULL) { 955 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
954 goto failed; 956 if (ctx->event == NULL) {
955 } 957 goto failed;
956 958 }
957 ctx->event->handler = ngx_resolver_timeout_handler; 959
958 ctx->event->data = ctx; 960 ctx->event->handler = ngx_resolver_timeout_handler;
959 ctx->event->log = r->log; 961 ctx->event->data = ctx;
960 ctx->ident = -1; 962 ctx->event->log = r->log;
961 963 ctx->ident = -1;
962 ngx_add_timer(ctx->event, ctx->timeout); 964
965 ngx_add_timer(ctx->event, ctx->timeout);
966 }
963 967
964 if (ngx_queue_empty(resend_queue)) { 968 if (ngx_queue_empty(resend_queue)) {
965 ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000)); 969 ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000));
966 } 970 }
967 971