Mercurial > hg > nginx
comparison src/core/ngx_resolver.c @ 7051:137c5be7df09
Resolver: factored out setting a timer for resolver timeout.
No functional changes.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 04 Jul 2017 18:46:30 +0300 |
parents | 80224192163c |
children | 70e65bf8dfd7 |
comparison
equal
deleted
inserted
replaced
7050:8c5e3cc21332 | 7051:137c5be7df09 |
---|---|
103 in_addr_t addr); | 103 in_addr_t addr); |
104 static void ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp, | 104 static void ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp, |
105 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); | 105 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel); |
106 static ngx_int_t ngx_resolver_copy(ngx_resolver_t *r, ngx_str_t *name, | 106 static ngx_int_t ngx_resolver_copy(ngx_resolver_t *r, ngx_str_t *name, |
107 u_char *buf, u_char *src, u_char *last); | 107 u_char *buf, u_char *src, u_char *last); |
108 static ngx_int_t ngx_resolver_set_timeout(ngx_resolver_t *r, | |
109 ngx_resolver_ctx_t *ctx); | |
108 static void ngx_resolver_timeout_handler(ngx_event_t *ev); | 110 static void ngx_resolver_timeout_handler(ngx_event_t *ev); |
109 static void ngx_resolver_free_node(ngx_resolver_t *r, ngx_resolver_node_t *rn); | 111 static void ngx_resolver_free_node(ngx_resolver_t *r, ngx_resolver_node_t *rn); |
110 static void *ngx_resolver_alloc(ngx_resolver_t *r, size_t size); | 112 static void *ngx_resolver_alloc(ngx_resolver_t *r, size_t size); |
111 static void *ngx_resolver_calloc(ngx_resolver_t *r, size_t size); | 113 static void *ngx_resolver_calloc(ngx_resolver_t *r, size_t size); |
112 static void ngx_resolver_free(ngx_resolver_t *r, void *p); | 114 static void ngx_resolver_free(ngx_resolver_t *r, void *p); |
726 | 728 |
727 return NGX_OK; | 729 return NGX_OK; |
728 } | 730 } |
729 | 731 |
730 if (rn->waiting) { | 732 if (rn->waiting) { |
731 | 733 if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) { |
732 if (ctx->event == NULL && ctx->timeout) { | 734 return NGX_ERROR; |
733 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); | |
734 if (ctx->event == NULL) { | |
735 return NGX_ERROR; | |
736 } | |
737 | |
738 ctx->event->handler = ngx_resolver_timeout_handler; | |
739 ctx->event->data = ctx; | |
740 ctx->event->log = r->log; | |
741 ctx->ident = -1; | |
742 | |
743 ngx_add_timer(ctx->event, ctx->timeout); | |
744 } | 735 } |
745 | 736 |
746 last->next = rn->waiting; | 737 last->next = rn->waiting; |
747 rn->waiting = ctx; | 738 rn->waiting = ctx; |
748 ctx->state = NGX_AGAIN; | 739 ctx->state = NGX_AGAIN; |
862 | 853 |
863 if (ngx_resolver_send_query(r, rn) != NGX_OK) { | 854 if (ngx_resolver_send_query(r, rn) != NGX_OK) { |
864 goto failed; | 855 goto failed; |
865 } | 856 } |
866 | 857 |
867 if (ctx->event == NULL && ctx->timeout) { | 858 if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) { |
868 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); | 859 goto failed; |
869 if (ctx->event == NULL) { | |
870 goto failed; | |
871 } | |
872 | |
873 ctx->event->handler = ngx_resolver_timeout_handler; | |
874 ctx->event->data = ctx; | |
875 ctx->event->log = r->log; | |
876 ctx->ident = -1; | |
877 | |
878 ngx_add_timer(ctx->event, ctx->timeout); | |
879 } | 860 } |
880 | 861 |
881 if (ngx_resolver_resend_empty(r)) { | 862 if (ngx_resolver_resend_empty(r)) { |
882 ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000)); | 863 ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000)); |
883 } | 864 } |
1005 | 986 |
1006 return NGX_OK; | 987 return NGX_OK; |
1007 } | 988 } |
1008 | 989 |
1009 if (rn->waiting) { | 990 if (rn->waiting) { |
1010 | 991 if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) { |
1011 if (ctx->event == NULL && ctx->timeout) { | 992 return NGX_ERROR; |
1012 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); | |
1013 if (ctx->event == NULL) { | |
1014 return NGX_ERROR; | |
1015 } | |
1016 | |
1017 ctx->event->handler = ngx_resolver_timeout_handler; | |
1018 ctx->event->data = ctx; | |
1019 ctx->event->log = r->log; | |
1020 ctx->ident = -1; | |
1021 | |
1022 ngx_add_timer(ctx->event, ctx->timeout); | |
1023 } | 993 } |
1024 | 994 |
1025 ctx->next = rn->waiting; | 995 ctx->next = rn->waiting; |
1026 rn->waiting = ctx; | 996 rn->waiting = ctx; |
1027 ctx->state = NGX_AGAIN; | 997 ctx->state = NGX_AGAIN; |
1087 | 1057 |
1088 if (ngx_resolver_send_query(r, rn) != NGX_OK) { | 1058 if (ngx_resolver_send_query(r, rn) != NGX_OK) { |
1089 goto failed; | 1059 goto failed; |
1090 } | 1060 } |
1091 | 1061 |
1092 if (ctx->event == NULL && ctx->timeout) { | 1062 if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) { |
1093 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); | 1063 goto failed; |
1094 if (ctx->event == NULL) { | |
1095 goto failed; | |
1096 } | |
1097 | |
1098 ctx->event->handler = ngx_resolver_timeout_handler; | |
1099 ctx->event->data = ctx; | |
1100 ctx->event->log = r->log; | |
1101 ctx->ident = -1; | |
1102 | |
1103 ngx_add_timer(ctx->event, ctx->timeout); | |
1104 } | 1064 } |
1105 | 1065 |
1106 if (ngx_resolver_resend_empty(r)) { | 1066 if (ngx_resolver_resend_empty(r)) { |
1107 ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000)); | 1067 ngx_add_timer(r->event, (ngx_msec_t) (r->resend_timeout * 1000)); |
1108 } | 1068 } |
4031 } | 3991 } |
4032 } | 3992 } |
4033 } | 3993 } |
4034 | 3994 |
4035 | 3995 |
3996 static ngx_int_t | |
3997 ngx_resolver_set_timeout(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx) | |
3998 { | |
3999 if (ctx->event || ctx->timeout == 0) { | |
4000 return NGX_OK; | |
4001 } | |
4002 | |
4003 ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t)); | |
4004 if (ctx->event == NULL) { | |
4005 return NGX_ERROR; | |
4006 } | |
4007 | |
4008 ctx->event->handler = ngx_resolver_timeout_handler; | |
4009 ctx->event->data = ctx; | |
4010 ctx->event->log = r->log; | |
4011 ctx->ident = -1; | |
4012 | |
4013 ngx_add_timer(ctx->event, ctx->timeout); | |
4014 | |
4015 return NGX_OK; | |
4016 } | |
4017 | |
4018 | |
4036 static void | 4019 static void |
4037 ngx_resolver_timeout_handler(ngx_event_t *ev) | 4020 ngx_resolver_timeout_handler(ngx_event_t *ev) |
4038 { | 4021 { |
4039 ngx_resolver_ctx_t *ctx; | 4022 ngx_resolver_ctx_t *ctx; |
4040 | 4023 |