Update auf Nginx 1.13.4
This commit is contained in:
@@ -273,6 +273,12 @@ main(int argc, char *const *argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* ngx_slab_sizes_init() requires ngx_pagesize set in ngx_os_init()
|
||||
*/
|
||||
|
||||
ngx_slab_sizes_init();
|
||||
|
||||
if (ngx_add_inherited_sockets(&init_cycle) != NGX_OK) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
#define _NGINX_H_INCLUDED_
|
||||
|
||||
|
||||
#define nginx_version 1013001
|
||||
#define NGINX_VERSION "1.13.1"
|
||||
#define nginx_version 1013004
|
||||
#define NGINX_VERSION "1.13.4"
|
||||
#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
|
||||
#ifdef NGX_BUILD
|
||||
|
||||
@@ -473,7 +473,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
||||
|
||||
#if (NGX_HAVE_REUSEPORT)
|
||||
|
||||
if (ls[i].reuseport) {
|
||||
if (ls[i].reuseport && !ngx_test_config) {
|
||||
int reuseport;
|
||||
|
||||
reuseport = 1;
|
||||
@@ -483,7 +483,7 @@ ngx_open_listening_sockets(ngx_cycle_t *cycle)
|
||||
== -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
|
||||
"setsockopt(SO_REUSEPORT) %V failed, ignored",
|
||||
"setsockopt(SO_REUSEPORT) %V failed",
|
||||
&ls[i].addr_text);
|
||||
|
||||
if (ngx_close_socket(s) == -1) {
|
||||
|
||||
@@ -1124,9 +1124,7 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
|
||||
if (user != (ngx_uid_t) NGX_CONF_UNSET_UINT) {
|
||||
ngx_file_info_t fi;
|
||||
|
||||
if (ngx_file_info((const char *) file[i].name.data, &fi)
|
||||
== NGX_FILE_ERROR)
|
||||
{
|
||||
if (ngx_file_info(file[i].name.data, &fi) == NGX_FILE_ERROR) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
ngx_file_info_n " \"%s\" failed",
|
||||
file[i].name.data);
|
||||
|
||||
@@ -622,9 +622,7 @@ ngx_create_paths(ngx_cycle_t *cycle, ngx_uid_t user)
|
||||
{
|
||||
ngx_file_info_t fi;
|
||||
|
||||
if (ngx_file_info((const char *) path[i]->name.data, &fi)
|
||||
== NGX_FILE_ERROR)
|
||||
{
|
||||
if (ngx_file_info(path[i]->name.data, &fi) == NGX_FILE_ERROR) {
|
||||
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
||||
ngx_file_info_n " \"%s\" failed", path[i]->name.data);
|
||||
return NGX_ERROR;
|
||||
|
||||
@@ -58,7 +58,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
day = (*p - '0') * 10 + *(p + 1) - '0';
|
||||
day = (*p - '0') * 10 + (*(p + 1) - '0');
|
||||
p += 2;
|
||||
|
||||
if (*p == ' ') {
|
||||
@@ -132,7 +132,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
}
|
||||
|
||||
year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100
|
||||
+ (*(p + 2) - '0') * 10 + *(p + 3) - '0';
|
||||
+ (*(p + 2) - '0') * 10 + (*(p + 3) - '0');
|
||||
p += 4;
|
||||
|
||||
} else if (fmt == rfc850) {
|
||||
@@ -140,7 +140,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
year = (*p - '0') * 10 + *(p + 1) - '0';
|
||||
year = (*p - '0') * 10 + (*(p + 1) - '0');
|
||||
year += (year < 70) ? 2000 : 1900;
|
||||
p += 2;
|
||||
}
|
||||
@@ -161,7 +161,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
day = day * 10 + *p++ - '0';
|
||||
day = day * 10 + (*p++ - '0');
|
||||
}
|
||||
|
||||
if (end - p < 14) {
|
||||
@@ -177,7 +177,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
hour = (*p - '0') * 10 + *(p + 1) - '0';
|
||||
hour = (*p - '0') * 10 + (*(p + 1) - '0');
|
||||
p += 2;
|
||||
|
||||
if (*p++ != ':') {
|
||||
@@ -188,7 +188,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
min = (*p - '0') * 10 + *(p + 1) - '0';
|
||||
min = (*p - '0') * 10 + (*(p + 1) - '0');
|
||||
p += 2;
|
||||
|
||||
if (*p++ != ':') {
|
||||
@@ -199,7 +199,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
sec = (*p - '0') * 10 + *(p + 1) - '0';
|
||||
sec = (*p - '0') * 10 + (*(p + 1) - '0');
|
||||
|
||||
if (fmt == isoc) {
|
||||
p += 2;
|
||||
@@ -216,7 +216,7 @@ ngx_parse_http_time(u_char *value, size_t len)
|
||||
}
|
||||
|
||||
year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100
|
||||
+ (*(p + 2) - '0') * 10 + *(p + 3) - '0';
|
||||
+ (*(p + 2) - '0') * 10 + (*(p + 3) - '0');
|
||||
}
|
||||
|
||||
if (hour > 23 || min > 59 || sec > 59) {
|
||||
|
||||
@@ -105,6 +105,8 @@ static void ngx_resolver_rbtree_insert_value(ngx_rbtree_node_t *temp,
|
||||
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
|
||||
static ngx_int_t ngx_resolver_copy(ngx_resolver_t *r, ngx_str_t *name,
|
||||
u_char *buf, u_char *src, u_char *last);
|
||||
static ngx_int_t ngx_resolver_set_timeout(ngx_resolver_t *r,
|
||||
ngx_resolver_ctx_t *ctx);
|
||||
static void ngx_resolver_timeout_handler(ngx_event_t *ev);
|
||||
static void ngx_resolver_free_node(ngx_resolver_t *r, ngx_resolver_node_t *rn);
|
||||
static void *ngx_resolver_alloc(ngx_resolver_t *r, size_t size);
|
||||
@@ -189,6 +191,7 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
|
||||
r->event->handler = ngx_resolver_resend_handler;
|
||||
r->event->data = r;
|
||||
r->event->log = &cf->cycle->new_log;
|
||||
r->event->cancelable = 1;
|
||||
r->ident = -1;
|
||||
|
||||
r->resend_timeout = 5;
|
||||
@@ -443,7 +446,7 @@ ngx_resolve_name(ngx_resolver_ctx_t *ctx)
|
||||
|
||||
name.data = ngx_resolver_alloc(r, name.len);
|
||||
if (name.data == NULL) {
|
||||
return NGX_ERROR;
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (slen == ctx->service.len) {
|
||||
@@ -481,6 +484,8 @@ ngx_resolve_name(ngx_resolver_ctx_t *ctx)
|
||||
ngx_resolver_free(r, ctx->event);
|
||||
}
|
||||
|
||||
failed:
|
||||
|
||||
ngx_resolver_free(r, ctx);
|
||||
|
||||
return NGX_ERROR;
|
||||
@@ -726,24 +731,14 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx,
|
||||
}
|
||||
|
||||
if (rn->waiting) {
|
||||
|
||||
if (ctx->event == NULL && ctx->timeout) {
|
||||
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
|
||||
if (ctx->event == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
ctx->event->data = ctx;
|
||||
ctx->event->log = r->log;
|
||||
ctx->ident = -1;
|
||||
|
||||
ngx_add_timer(ctx->event, ctx->timeout);
|
||||
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
last->next = rn->waiting;
|
||||
rn->waiting = ctx;
|
||||
ctx->state = NGX_AGAIN;
|
||||
ctx->async = 1;
|
||||
|
||||
do {
|
||||
ctx->node = rn;
|
||||
@@ -861,18 +856,8 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx,
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (ctx->event == NULL && ctx->timeout) {
|
||||
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
|
||||
if (ctx->event == NULL) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
ctx->event->data = ctx;
|
||||
ctx->event->log = r->log;
|
||||
ctx->ident = -1;
|
||||
|
||||
ngx_add_timer(ctx->event, ctx->timeout);
|
||||
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (ngx_resolver_resend_empty(r)) {
|
||||
@@ -890,6 +875,7 @@ ngx_resolve_name_locked(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx,
|
||||
rn->waiting = ctx;
|
||||
|
||||
ctx->state = NGX_AGAIN;
|
||||
ctx->async = 1;
|
||||
|
||||
do {
|
||||
ctx->node = rn;
|
||||
@@ -1003,24 +989,14 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
|
||||
}
|
||||
|
||||
if (rn->waiting) {
|
||||
|
||||
if (ctx->event == NULL && ctx->timeout) {
|
||||
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
|
||||
if (ctx->event == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
ctx->event->data = ctx;
|
||||
ctx->event->log = r->log;
|
||||
ctx->ident = -1;
|
||||
|
||||
ngx_add_timer(ctx->event, ctx->timeout);
|
||||
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ctx->next = rn->waiting;
|
||||
rn->waiting = ctx;
|
||||
ctx->state = NGX_AGAIN;
|
||||
ctx->async = 1;
|
||||
ctx->node = rn;
|
||||
|
||||
/* unlock addr mutex */
|
||||
@@ -1084,18 +1060,8 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (ctx->event == NULL && ctx->timeout) {
|
||||
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
|
||||
if (ctx->event == NULL) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
ctx->event->data = ctx;
|
||||
ctx->event->log = r->log;
|
||||
ctx->ident = -1;
|
||||
|
||||
ngx_add_timer(ctx->event, ctx->timeout);
|
||||
if (ngx_resolver_set_timeout(r, ctx) != NGX_OK) {
|
||||
goto failed;
|
||||
}
|
||||
|
||||
if (ngx_resolver_resend_empty(r)) {
|
||||
@@ -1117,6 +1083,7 @@ ngx_resolve_addr(ngx_resolver_ctx_t *ctx)
|
||||
/* unlock addr mutex */
|
||||
|
||||
ctx->state = NGX_AGAIN;
|
||||
ctx->async = 1;
|
||||
ctx->node = rn;
|
||||
|
||||
return NGX_OK;
|
||||
@@ -3017,6 +2984,7 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx)
|
||||
srv = cctx->srvs;
|
||||
|
||||
ctx->count--;
|
||||
ctx->async |= cctx->async;
|
||||
|
||||
srv->ctx = NULL;
|
||||
srv->state = cctx->state;
|
||||
@@ -3027,25 +2995,15 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx)
|
||||
|
||||
addrs = ngx_resolver_calloc(r, cctx->naddrs * sizeof(ngx_addr_t));
|
||||
if (addrs == NULL) {
|
||||
ngx_resolve_name_done(cctx);
|
||||
|
||||
ctx->state = NGX_ERROR;
|
||||
ctx->valid = ngx_time() + (r->valid ? r->valid : 10);
|
||||
|
||||
ctx->handler(ctx);
|
||||
return;
|
||||
srv->state = NGX_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
sockaddr = ngx_resolver_alloc(r, cctx->naddrs * sizeof(ngx_sockaddr_t));
|
||||
if (sockaddr == NULL) {
|
||||
ngx_resolver_free(r, addrs);
|
||||
ngx_resolve_name_done(cctx);
|
||||
|
||||
ctx->state = NGX_ERROR;
|
||||
ctx->valid = ngx_time() + (r->valid ? r->valid : 10);
|
||||
|
||||
ctx->handler(ctx);
|
||||
return;
|
||||
srv->state = NGX_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
for (i = 0; i < cctx->naddrs; i++) {
|
||||
@@ -3062,6 +3020,8 @@ ngx_resolver_srv_names_handler(ngx_resolver_ctx_t *cctx)
|
||||
srv->naddrs = cctx->naddrs;
|
||||
}
|
||||
|
||||
done:
|
||||
|
||||
ngx_resolve_name_done(cctx);
|
||||
|
||||
if (ctx->count == 0) {
|
||||
@@ -4034,6 +3994,30 @@ done:
|
||||
}
|
||||
|
||||
|
||||
static ngx_int_t
|
||||
ngx_resolver_set_timeout(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
|
||||
{
|
||||
if (ctx->event || ctx->timeout == 0) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
ctx->event = ngx_resolver_calloc(r, sizeof(ngx_event_t));
|
||||
if (ctx->event == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
ctx->event->handler = ngx_resolver_timeout_handler;
|
||||
ctx->event->data = ctx;
|
||||
ctx->event->log = r->log;
|
||||
ctx->event->cancelable = ctx->cancelable;
|
||||
ctx->ident = -1;
|
||||
|
||||
ngx_add_timer(ctx->event, ctx->timeout);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ngx_resolver_timeout_handler(ngx_event_t *ev)
|
||||
{
|
||||
@@ -4247,10 +4231,21 @@ ngx_resolver_report_srv(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
|
||||
ngx_resolver_addr_t *addrs;
|
||||
ngx_resolver_srv_name_t *srvs;
|
||||
|
||||
srvs = ctx->srvs;
|
||||
nsrvs = ctx->nsrvs;
|
||||
|
||||
naddrs = 0;
|
||||
|
||||
for (i = 0; i < ctx->nsrvs; i++) {
|
||||
naddrs += ctx->srvs[i].naddrs;
|
||||
for (i = 0; i < nsrvs; i++) {
|
||||
if (srvs[i].state == NGX_ERROR) {
|
||||
ctx->state = NGX_ERROR;
|
||||
ctx->valid = ngx_time() + (r->valid ? r->valid : 10);
|
||||
|
||||
ctx->handler(ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
naddrs += srvs[i].naddrs;
|
||||
}
|
||||
|
||||
if (naddrs == 0) {
|
||||
@@ -4270,9 +4265,6 @@ ngx_resolver_report_srv(ngx_resolver_t *r, ngx_resolver_ctx_t *ctx)
|
||||
return;
|
||||
}
|
||||
|
||||
srvs = ctx->srvs;
|
||||
nsrvs = ctx->nsrvs;
|
||||
|
||||
i = 0;
|
||||
n = 0;
|
||||
|
||||
|
||||
@@ -218,7 +218,9 @@ struct ngx_resolver_ctx_s {
|
||||
void *data;
|
||||
ngx_msec_t timeout;
|
||||
|
||||
ngx_uint_t quick; /* unsigned quick:1; */
|
||||
unsigned quick:1;
|
||||
unsigned async:1;
|
||||
unsigned cancelable:1;
|
||||
ngx_uint_t recursion;
|
||||
ngx_event_t *event;
|
||||
};
|
||||
|
||||
@@ -94,7 +94,7 @@ ngx_rwlock_unlock(ngx_atomic_t *lock)
|
||||
readers = *lock;
|
||||
|
||||
if (readers == NGX_RWLOCK_WLOCK) {
|
||||
*lock = 0;
|
||||
(void) ngx_atomic_cmp_set(lock, NGX_RWLOCK_WLOCK, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -109,6 +109,15 @@ ngx_rwlock_unlock(ngx_atomic_t *lock)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_rwlock_downgrade(ngx_atomic_t *lock)
|
||||
{
|
||||
if (*lock == NGX_RWLOCK_WLOCK) {
|
||||
*lock = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
|
||||
#if (NGX_HTTP_UPSTREAM_ZONE || NGX_STREAM_UPSTREAM_ZONE)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
void ngx_rwlock_wlock(ngx_atomic_t *lock);
|
||||
void ngx_rwlock_rlock(ngx_atomic_t *lock);
|
||||
void ngx_rwlock_unlock(ngx_atomic_t *lock);
|
||||
void ngx_rwlock_downgrade(ngx_atomic_t *lock);
|
||||
|
||||
|
||||
#endif /* _NGX_RWLOCK_H_INCLUDED_ */
|
||||
|
||||
@@ -82,6 +82,19 @@ static ngx_uint_t ngx_slab_exact_size;
|
||||
static ngx_uint_t ngx_slab_exact_shift;
|
||||
|
||||
|
||||
void
|
||||
ngx_slab_sizes_init(void)
|
||||
{
|
||||
ngx_uint_t n;
|
||||
|
||||
ngx_slab_max_size = ngx_pagesize / 2;
|
||||
ngx_slab_exact_size = ngx_pagesize / (8 * sizeof(uintptr_t));
|
||||
for (n = ngx_slab_exact_size; n >>= 1; ngx_slab_exact_shift++) {
|
||||
/* void */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_slab_init(ngx_slab_pool_t *pool)
|
||||
{
|
||||
@@ -91,16 +104,6 @@ ngx_slab_init(ngx_slab_pool_t *pool)
|
||||
ngx_uint_t i, n, pages;
|
||||
ngx_slab_page_t *slots, *page;
|
||||
|
||||
/* STUB */
|
||||
if (ngx_slab_max_size == 0) {
|
||||
ngx_slab_max_size = ngx_pagesize / 2;
|
||||
ngx_slab_exact_size = ngx_pagesize / (8 * sizeof(uintptr_t));
|
||||
for (n = ngx_slab_exact_size; n >>= 1; ngx_slab_exact_shift++) {
|
||||
/* void */
|
||||
}
|
||||
}
|
||||
/**/
|
||||
|
||||
pool->min_size = (size_t) 1 << pool->min_shift;
|
||||
|
||||
slots = ngx_slab_slots(pool);
|
||||
@@ -181,8 +184,8 @@ void *
|
||||
ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
{
|
||||
size_t s;
|
||||
uintptr_t p, n, m, mask, *bitmap;
|
||||
ngx_uint_t i, slot, shift, map;
|
||||
uintptr_t p, m, mask, *bitmap;
|
||||
ngx_uint_t i, n, slot, shift, map;
|
||||
ngx_slab_page_t *page, *prev, *slots;
|
||||
|
||||
if (size > ngx_slab_max_size) {
|
||||
@@ -226,7 +229,7 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
|
||||
bitmap = (uintptr_t *) ngx_slab_page_addr(pool, page);
|
||||
|
||||
map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
|
||||
map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));
|
||||
|
||||
for (n = 0; n < map; n++) {
|
||||
|
||||
@@ -239,7 +242,7 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
|
||||
bitmap[n] |= m;
|
||||
|
||||
i = (n * sizeof(uintptr_t) * 8 + i) << shift;
|
||||
i = (n * 8 * sizeof(uintptr_t) + i) << shift;
|
||||
|
||||
p = (uintptr_t) bitmap + i;
|
||||
|
||||
@@ -339,11 +342,17 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
}
|
||||
|
||||
/* "n" elements for bitmap, plus one requested */
|
||||
bitmap[0] = ((uintptr_t) 2 << n) - 1;
|
||||
|
||||
map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
|
||||
for (i = 0; i < (n + 1) / (8 * sizeof(uintptr_t)); i++) {
|
||||
bitmap[i] = NGX_SLAB_BUSY;
|
||||
}
|
||||
|
||||
for (i = 1; i < map; i++) {
|
||||
m = ((uintptr_t) 1 << ((n + 1) % (8 * sizeof(uintptr_t)))) - 1;
|
||||
bitmap[i] = m;
|
||||
|
||||
map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));
|
||||
|
||||
for (i = i + 1; i < map; i++) {
|
||||
bitmap[i] = 0;
|
||||
}
|
||||
|
||||
@@ -369,7 +378,7 @@ ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size)
|
||||
|
||||
slots[slot].next = page;
|
||||
|
||||
pool->stats[slot].total += sizeof(uintptr_t) * 8;
|
||||
pool->stats[slot].total += 8 * sizeof(uintptr_t);
|
||||
|
||||
p = ngx_slab_page_addr(pool, page);
|
||||
|
||||
@@ -480,8 +489,8 @@ ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p)
|
||||
}
|
||||
|
||||
n = ((uintptr_t) p & (ngx_pagesize - 1)) >> shift;
|
||||
m = (uintptr_t) 1 << (n % (sizeof(uintptr_t) * 8));
|
||||
n /= sizeof(uintptr_t) * 8;
|
||||
m = (uintptr_t) 1 << (n % (8 * sizeof(uintptr_t)));
|
||||
n /= 8 * sizeof(uintptr_t);
|
||||
bitmap = (uintptr_t *)
|
||||
((uintptr_t) p & ~((uintptr_t) ngx_pagesize - 1));
|
||||
|
||||
@@ -506,13 +515,16 @@ ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p)
|
||||
n = 1;
|
||||
}
|
||||
|
||||
if (bitmap[0] & ~(((uintptr_t) 1 << n) - 1)) {
|
||||
i = n / (8 * sizeof(uintptr_t));
|
||||
m = ((uintptr_t) 1 << (n % (8 * sizeof(uintptr_t)))) - 1;
|
||||
|
||||
if (bitmap[i] & ~m) {
|
||||
goto done;
|
||||
}
|
||||
|
||||
map = (ngx_pagesize >> shift) / (sizeof(uintptr_t) * 8);
|
||||
map = (ngx_pagesize >> shift) / (8 * sizeof(uintptr_t));
|
||||
|
||||
for (i = 1; i < map; i++) {
|
||||
for (i = i + 1; i < map; i++) {
|
||||
if (bitmap[i]) {
|
||||
goto done;
|
||||
}
|
||||
@@ -558,7 +570,7 @@ ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p)
|
||||
|
||||
ngx_slab_free_pages(pool, page, 1);
|
||||
|
||||
pool->stats[slot].total -= sizeof(uintptr_t) * 8;
|
||||
pool->stats[slot].total -= 8 * sizeof(uintptr_t);
|
||||
|
||||
goto done;
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ typedef struct {
|
||||
} ngx_slab_pool_t;
|
||||
|
||||
|
||||
void ngx_slab_sizes_init(void);
|
||||
void ngx_slab_init(ngx_slab_pool_t *pool);
|
||||
void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size);
|
||||
void *ngx_slab_alloc_locked(ngx_slab_pool_t *pool, size_t size);
|
||||
|
||||
@@ -178,7 +178,7 @@ ngx_vslprintf(u_char *buf, u_char *last, const char *fmt, va_list args)
|
||||
slen = (size_t) -1;
|
||||
|
||||
while (*fmt >= '0' && *fmt <= '9') {
|
||||
width = width * 10 + *fmt++ - '0';
|
||||
width = width * 10 + (*fmt++ - '0');
|
||||
}
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@ ngx_vslprintf(u_char *buf, u_char *last, const char *fmt, va_list args)
|
||||
fmt++;
|
||||
|
||||
while (*fmt >= '0' && *fmt <= '9') {
|
||||
frac_width = frac_width * 10 + *fmt++ - '0';
|
||||
frac_width = frac_width * 10 + (*fmt++ - '0');
|
||||
}
|
||||
|
||||
break;
|
||||
@@ -1655,7 +1655,7 @@ ngx_unescape_uri(u_char **dst, u_char **src, size_t size, ngx_uint_t type)
|
||||
state = sw_usual;
|
||||
|
||||
if (ch >= '0' && ch <= '9') {
|
||||
ch = (u_char) ((decoded << 4) + ch - '0');
|
||||
ch = (u_char) ((decoded << 4) + (ch - '0'));
|
||||
|
||||
if (type & NGX_UNESCAPE_REDIRECT) {
|
||||
if (ch > '%' && ch < 0x7f) {
|
||||
@@ -1675,7 +1675,7 @@ ngx_unescape_uri(u_char **dst, u_char **src, size_t size, ngx_uint_t type)
|
||||
|
||||
c = (u_char) (ch | 0x20);
|
||||
if (c >= 'a' && c <= 'f') {
|
||||
ch = (u_char) ((decoded << 4) + c - 'a' + 10);
|
||||
ch = (u_char) ((decoded << 4) + (c - 'a') + 10);
|
||||
|
||||
if (type & NGX_UNESCAPE_URI) {
|
||||
if (ch == '?') {
|
||||
|
||||
Reference in New Issue
Block a user