mirror of
https://github.com/nginx/nginx.git
synced 2024-12-19 21:53:31 -06:00
Core: slab log_nomem flag.
The flag allows to suppress "ngx_slab_alloc() failed: no memory" messages from a slab allocator, e.g., if an LRU expiration is used by a consumer and allocation failures aren't fatal. The flag is now used in the SSL session cache code, and in the limit_req module.
This commit is contained in:
parent
8f6958baa9
commit
23f6689846
@ -129,6 +129,7 @@ ngx_slab_init(ngx_slab_pool_t *pool)
|
|||||||
pool->pages->slab = pages;
|
pool->pages->slab = pages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pool->log_nomem = 1;
|
||||||
pool->log_ctx = &pool->zero;
|
pool->log_ctx = &pool->zero;
|
||||||
pool->zero = '\0';
|
pool->zero = '\0';
|
||||||
}
|
}
|
||||||
@ -658,7 +659,10 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *pool, ngx_uint_t pages)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
|
if (pool->log_nomem) {
|
||||||
|
ngx_slab_error(pool, NGX_LOG_CRIT,
|
||||||
|
"ngx_slab_alloc() failed: no memory");
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,8 @@ typedef struct {
|
|||||||
u_char *log_ctx;
|
u_char *log_ctx;
|
||||||
u_char zero;
|
u_char zero;
|
||||||
|
|
||||||
|
unsigned log_nomem:1;
|
||||||
|
|
||||||
void *data;
|
void *data;
|
||||||
void *addr;
|
void *addr;
|
||||||
} ngx_slab_pool_t;
|
} ngx_slab_pool_t;
|
||||||
|
@ -1834,6 +1834,8 @@ ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone, void *data)
|
|||||||
ngx_sprintf(shpool->log_ctx, " in SSL session shared cache \"%V\"%Z",
|
ngx_sprintf(shpool->log_ctx, " in SSL session shared cache \"%V\"%Z",
|
||||||
&shm_zone->shm.name);
|
&shm_zone->shm.name);
|
||||||
|
|
||||||
|
shpool->log_nomem = 0;
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1986,7 +1988,7 @@ failed:
|
|||||||
ngx_shmtx_unlock(&shpool->mutex);
|
ngx_shmtx_unlock(&shpool->mutex);
|
||||||
|
|
||||||
ngx_log_error(NGX_LOG_ALERT, c->log, 0,
|
ngx_log_error(NGX_LOG_ALERT, c->log, 0,
|
||||||
"could not add new SSL session to the session cache");
|
"could not allocate new session%s", shpool->log_ctx);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -451,6 +451,8 @@ ngx_http_limit_req_lookup(ngx_http_limit_req_limit_t *limit, ngx_uint_t hash,
|
|||||||
|
|
||||||
node = ngx_slab_alloc_locked(ctx->shpool, size);
|
node = ngx_slab_alloc_locked(ctx->shpool, size);
|
||||||
if (node == NULL) {
|
if (node == NULL) {
|
||||||
|
ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
|
||||||
|
"could not allocate node%s", ctx->shpool->log_ctx);
|
||||||
return NGX_ERROR;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -674,6 +676,8 @@ ngx_http_limit_req_init_zone(ngx_shm_zone_t *shm_zone, void *data)
|
|||||||
ngx_sprintf(ctx->shpool->log_ctx, " in limit_req zone \"%V\"%Z",
|
ngx_sprintf(ctx->shpool->log_ctx, " in limit_req zone \"%V\"%Z",
|
||||||
&shm_zone->shm.name);
|
&shm_zone->shm.name);
|
||||||
|
|
||||||
|
ctx->shpool->log_nomem = 0;
|
||||||
|
|
||||||
return NGX_OK;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user