Mercurial > hg > nginx-vendor-1-0
diff src/core/ngx_inet.c @ 340:10cc350ed8a1 NGINX_0_6_14
nginx 0.6.14
*) Change: now by default the "echo" SSI command uses entity encoding.
*) Feature: the "encoding" parameter in the "echo" SSI command.
*) Feature: the "access_log" directive may be used inside the
"limit_except" block.
*) Bugfix: if all upstream servers were failed, then all servers had
got weight the was equal one until servers became alive; bug
appeared in 0.6.6.
*) Bugfix: a segmentation fault occurred in worker process if
$date_local and $date_gmt were used outside the
ngx_http_ssi_filter_module.
*) Bugfix: a segmentation fault might occur in worker process if debug
log was enabled.
Thanks to Andrei Nigmatulin.
*) Bugfix: ngx_http_memcached_module did not set
$upstream_response_time.
Thanks to Maxim Dounin.
*) Bugfix: a worker process may got caught in an endless loop, if the
memcached was used.
*) Bugfix: nginx supported low case only "close" and "keep-alive"
values in the "Connection" request header line; bug appeared in
0.6.11.
*) Bugfix: sub_filter did not work with empty substitution.
*) Bugfix: in sub_filter parsing.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 15 Oct 2007 00:00:00 +0400 |
parents | 9fc4ab6673f9 |
children | e10168d6e371 |
line wrap: on
line diff
--- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -225,7 +225,7 @@ ngx_ptocidr(ngx_str_t *text, void *cidr) ngx_int_t -ngx_parse_url(ngx_conf_t *cf, ngx_url_t *u) +ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u) { u_char *p, *host, *port_start; size_t len, port_len; @@ -273,12 +273,12 @@ ngx_parse_url(ngx_conf_t *cf, ngx_url_t return NGX_ERROR; } - u->addrs = ngx_pcalloc(cf->pool, sizeof(ngx_peer_addr_t)); + u->addrs = ngx_pcalloc(pool, sizeof(ngx_peer_addr_t)); if (u->addrs == NULL) { return NGX_ERROR; } - saun = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_un)); + saun = ngx_pcalloc(pool, sizeof(struct sockaddr_un)); if (saun == NULL) { return NGX_ERROR; } @@ -408,12 +408,12 @@ no_port: if (u->host.len) { - host = ngx_palloc(cf->temp_pool, u->host.len + 1); - if (host == NULL) { - return NGX_ERROR; - } + host = ngx_alloc(u->host.len + 1, pool->log); + if (host == NULL) { + return NGX_ERROR; + } - (void) ngx_cpystrn(host, u->host.data, u->host.len + 1); + (void) ngx_cpystrn(host, u->host.data, u->host.len + 1); u->addr.in_addr = inet_addr((const char *) host); @@ -421,6 +421,7 @@ no_port: h = gethostbyname((const char *) host); if (h == NULL || h->h_addr_list[0] == NULL) { + ngx_free(host); u->err = "host not found"; return NGX_ERROR; } @@ -428,6 +429,8 @@ no_port: u->addr.in_addr = *(in_addr_t *) (h->h_addr_list[0]); } + ngx_free(host); + } else { u->addr.in_addr = INADDR_ANY; } @@ -453,7 +456,7 @@ no_port: return NGX_ERROR; } - if (ngx_inet_resolve_host(cf, u) != NGX_OK) { + if (ngx_inet_resolve_host(pool, u) != NGX_OK) { return NGX_ERROR; } @@ -462,7 +465,7 @@ no_port: ngx_int_t -ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u) +ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u) { u_char *p, *host; size_t len; @@ -471,7 +474,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng struct hostent *h; struct sockaddr_in *sin; - host = ngx_palloc(cf->temp_pool, u->host.len + 1); + host = ngx_alloc(u->host.len + 1, pool->log); if (host == NULL) { return NGX_ERROR; } @@ -485,6 +488,8 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng if (in_addr == INADDR_NONE) { h = gethostbyname((char *) host); + ngx_free(host); + if (h == NULL || h->h_addr_list[0] == NULL) { u->err = "host not found"; return NGX_ERROR; @@ -499,7 +504,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng /* MP: ngx_shared_palloc() */ - u->addrs = ngx_pcalloc(cf->pool, i * sizeof(ngx_peer_addr_t)); + u->addrs = ngx_pcalloc(pool, i * sizeof(ngx_peer_addr_t)); if (u->addrs == NULL) { return NGX_ERROR; } @@ -508,7 +513,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng for (i = 0; h->h_addr_list[i] != NULL; i++) { - sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in)); + sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in)); if (sin == NULL) { return NGX_ERROR; } @@ -522,7 +527,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng len = INET_ADDRSTRLEN - 1 + 1 + sizeof(":65536") - 1; - p = ngx_palloc(cf->pool, len); + p = ngx_palloc(pool, len); if (p == NULL) { return NGX_ERROR; } @@ -535,14 +540,16 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng } else { + ngx_free(host); + /* MP: ngx_shared_palloc() */ - u->addrs = ngx_pcalloc(cf->pool, sizeof(ngx_peer_addr_t)); + u->addrs = ngx_pcalloc(pool, sizeof(ngx_peer_addr_t)); if (u->addrs == NULL) { return NGX_ERROR; } - sin = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in)); + sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in)); if (sin == NULL) { return NGX_ERROR; } @@ -556,7 +563,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng u->addrs[0].sockaddr = (struct sockaddr *) sin; u->addrs[0].socklen = sizeof(struct sockaddr_in); - p = ngx_palloc(cf->pool, u->host.len + sizeof(":65536") - 1); + p = ngx_palloc(pool, u->host.len + sizeof(":65536") - 1); if (p == NULL) { return NGX_ERROR; }