comparison src/core/ngx_resolver.c @ 7040:d49b74a683b1

Resolver: added the "async" flag to resolver context. The flag indicates that the resolve handler is called asynchronously after the resolve function ngx_resolve_name()/ngx_resolve_addr() exited.
author Roman Arutyunyan <arut@nginx.com>
date Wed, 14 Jun 2017 18:13:31 +0300
parents a39bc74873fa
children 80224192163c
comparison
equal deleted inserted replaced
7039:a39bc74873fa 7040:d49b74a683b1
744 } 744 }
745 745
746 last->next = rn->waiting; 746 last->next = rn->waiting;
747 rn->waiting = ctx; 747 rn->waiting = ctx;
748 ctx->state = NGX_AGAIN; 748 ctx->state = NGX_AGAIN;
749 ctx->async = 1;
749 750
750 do { 751 do {
751 ctx->node = rn; 752 ctx->node = rn;
752 ctx = ctx->next; 753 ctx = ctx->next;
753 } while (ctx); 754 } while (ctx);
890 rn->valid = 0; 891 rn->valid = 0;
891 rn->ttl = NGX_MAX_UINT32_VALUE; 892 rn->ttl = NGX_MAX_UINT32_VALUE;
892 rn->waiting = ctx; 893 rn->waiting = ctx;
893 894
894 ctx->state = NGX_AGAIN; 895 ctx->state = NGX_AGAIN;
896 ctx->async = 1;
895 897
896 do { 898 do {
897 ctx->node = rn; 899 ctx->node = rn;
898 ctx = ctx->next; 900 ctx = ctx->next;
899 } while (ctx); 901 } while (ctx);
1021 } 1023 }
1022 1024
1023 ctx->next = rn->waiting; 1025 ctx->next = rn->waiting;
1024 rn->waiting = ctx; 1026 rn->waiting = ctx;
1025 ctx->state = NGX_AGAIN; 1027 ctx->state = NGX_AGAIN;
1028 ctx->async = 1;
1026 ctx->node = rn; 1029 ctx->node = rn;
1027 1030
1028 /* unlock addr mutex */ 1031 /* unlock addr mutex */
1029 1032
1030 return NGX_OK; 1033 return NGX_OK;
1117 rn->waiting = ctx; 1120 rn->waiting = ctx;
1118 1121
1119 /* unlock addr mutex */ 1122 /* unlock addr mutex */
1120 1123
1121 ctx->state = NGX_AGAIN; 1124 ctx->state = NGX_AGAIN;
1125 ctx->async = 1;
1122 ctx->node = rn; 1126 ctx->node = rn;
1123 1127
1124 return NGX_OK; 1128 return NGX_OK;
1125 1129
1126 failed: 1130 failed:
3017 r = cctx->resolver; 3021 r = cctx->resolver;
3018 ctx = cctx->data; 3022 ctx = cctx->data;
3019 srv = cctx->srvs; 3023 srv = cctx->srvs;
3020 3024
3021 ctx->count--; 3025 ctx->count--;
3026 ctx->async |= cctx->async;
3022 3027
3023 srv->ctx = NULL; 3028 srv->ctx = NULL;
3024 srv->state = cctx->state; 3029 srv->state = cctx->state;
3025 3030
3026 if (cctx->naddrs) { 3031 if (cctx->naddrs) {