Mercurial > hg > nginx
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) { |