Mercurial > hg > nginx-vendor-0-5
comparison src/core/ngx_palloc.c @ 130:82d695e3d662 NGINX_0_3_12
nginx 0.3.12
*) Security: if nginx was built with the ngx_http_realip_module and the
"satisfy_any on" directive was used, then access and authorization
directives did not work. The ngx_http_realip_module was not built
and is not built by default.
*) Change: the "$time_gmt" variable name was changed to "$time_local".
*) Change: the "proxy_header_buffer_size" and
"fastcgi_header_buffer_size" directives was renamed to the
"proxy_buffer_size" and "fastcgi_buffer_size" directives.
*) Feature: the ngx_http_memcached_module.
*) Feature: the "proxy_buffering" directive.
*) Bugfix: the changes in accept mutex handling when the "rtsig" method
was used; bug appeared in 0.3.0.
*) Bugfix: if the client sent the "Transfer-Encoding: chunked" header
line, then nginx returns the 411 error.
*) Bugfix: if the "auth_basic" directive was inherited from the http
level, then the realm in the "WWW-Authenticate" header line was
without the "Basic realm" text.
*) Bugfix: if the "combined" format was explicitly specified in the
"access_log" directive, then the empty lines was written to the log;
bug appeared in 0.3.8.
*) Bugfix: nginx did not run on the sparc platform under any OS except
Solaris.
*) Bugfix: now it is not necessary to place space between the quoted
string and closing bracket in the "if" directive.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Sat, 26 Nov 2005 00:00:00 +0300 |
parents | 408f195b3482 |
children | 91372f004adf |
comparison
equal
deleted
inserted
replaced
129:a27c77ef3ad8 | 130:82d695e3d662 |
---|---|
18 return NULL; | 18 return NULL; |
19 } | 19 } |
20 | 20 |
21 p->last = (u_char *) p + sizeof(ngx_pool_t); | 21 p->last = (u_char *) p + sizeof(ngx_pool_t); |
22 p->end = (u_char *) p + size; | 22 p->end = (u_char *) p + size; |
23 p->current = p; | |
24 p->chain = NULL; | |
23 p->next = NULL; | 25 p->next = NULL; |
24 p->large = NULL; | 26 p->large = NULL; |
25 p->chain = NULL; | |
26 p->cleanup = NULL; | 27 p->cleanup = NULL; |
27 p->log = log; | 28 p->log = log; |
28 | 29 |
29 return p; | 30 return p; |
30 } | 31 } |
89 | 90 |
90 if (size <= (size_t) NGX_MAX_ALLOC_FROM_POOL | 91 if (size <= (size_t) NGX_MAX_ALLOC_FROM_POOL |
91 && size <= (size_t) (pool->end - (u_char *) pool) | 92 && size <= (size_t) (pool->end - (u_char *) pool) |
92 - (size_t) ngx_align(sizeof(ngx_pool_t))) | 93 - (size_t) ngx_align(sizeof(ngx_pool_t))) |
93 { | 94 { |
94 for (p = pool, n = pool->next; /* void */; p = n, n = n->next) { | 95 for (p = pool->current; /* void */ ; p = p->next) { |
95 m = ngx_align(p->last); | 96 m = ngx_align(p->last); |
96 | 97 |
97 if ((size_t) (p->end - m) >= size) { | 98 if ((size_t) (p->end - m) >= size) { |
98 p->last = m + size; | 99 p->last = m + size; |
99 | 100 |
100 return m; | 101 return m; |
101 } | 102 } |
102 | 103 |
103 if (n == NULL) { | 104 if ((size_t) (p->end - m) < NGX_ALIGNMENT) { |
105 p->current = p->next; | |
106 } | |
107 | |
108 if (p->next == NULL) { | |
104 break; | 109 break; |
105 } | 110 } |
106 } | 111 } |
107 | 112 |
108 /* allocate a new pool block */ | 113 /* allocate a new pool block */ |
109 | 114 |
110 n = ngx_create_pool((size_t) (p->end - (u_char *) p), p->log); | 115 n = ngx_create_pool((size_t) (p->end - (u_char *) p), p->log); |
111 if (n == NULL) { | 116 if (n == NULL) { |
112 return NULL; | 117 return NULL; |
118 } | |
119 | |
120 if (p->current == NULL) { | |
121 p->current = n; | |
113 } | 122 } |
114 | 123 |
115 p->next = n; | 124 p->next = n; |
116 m = ngx_align(n->last); | 125 m = ngx_align(n->last); |
117 n->last = m + size; | 126 n->last = m + size; |