Update Nginx auf 1.13.1
This commit is contained in:
@@ -124,6 +124,13 @@ static ngx_command_t ngx_core_commands[] = {
|
||||
offsetof(ngx_core_conf_t, rlimit_core),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("worker_shutdown_timeout"),
|
||||
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
|
||||
ngx_conf_set_msec_slot,
|
||||
0,
|
||||
offsetof(ngx_core_conf_t, shutdown_timeout),
|
||||
NULL },
|
||||
|
||||
{ ngx_string("working_directory"),
|
||||
NGX_MAIN_CONF|NGX_DIRECT_CONF|NGX_CONF_TAKE1,
|
||||
ngx_conf_set_str_slot,
|
||||
@@ -1014,6 +1021,7 @@ ngx_core_module_create_conf(ngx_cycle_t *cycle)
|
||||
ccf->daemon = NGX_CONF_UNSET;
|
||||
ccf->master = NGX_CONF_UNSET;
|
||||
ccf->timer_resolution = NGX_CONF_UNSET_MSEC;
|
||||
ccf->shutdown_timeout = NGX_CONF_UNSET_MSEC;
|
||||
|
||||
ccf->worker_processes = NGX_CONF_UNSET;
|
||||
ccf->debug_points = NGX_CONF_UNSET;
|
||||
@@ -1042,6 +1050,7 @@ ngx_core_module_init_conf(ngx_cycle_t *cycle, void *conf)
|
||||
ngx_conf_init_value(ccf->daemon, 1);
|
||||
ngx_conf_init_value(ccf->master, 1);
|
||||
ngx_conf_init_msec_value(ccf->timer_resolution, 0);
|
||||
ngx_conf_init_msec_value(ccf->shutdown_timeout, 0);
|
||||
|
||||
ngx_conf_init_value(ccf->worker_processes, 1);
|
||||
ngx_conf_init_value(ccf->debug_points, 0);
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
#define _NGINX_H_INCLUDED_
|
||||
|
||||
|
||||
#define nginx_version 1011009
|
||||
#define NGINX_VERSION "1.11.9"
|
||||
#define nginx_version 1013001
|
||||
#define NGINX_VERSION "1.13.1"
|
||||
#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
|
||||
#ifdef NGX_BUILD
|
||||
|
||||
@@ -1345,6 +1345,49 @@ ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_tcp_nodelay(ngx_connection_t *c)
|
||||
{
|
||||
int tcp_nodelay;
|
||||
|
||||
if (c->tcp_nodelay != NGX_TCP_NODELAY_UNSET) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
ngx_log_debug0(NGX_LOG_DEBUG_CORE, c->log, 0, "tcp_nodelay");
|
||||
|
||||
tcp_nodelay = 1;
|
||||
|
||||
if (setsockopt(c->fd, IPPROTO_TCP, TCP_NODELAY,
|
||||
(const void *) &tcp_nodelay, sizeof(int))
|
||||
== -1)
|
||||
{
|
||||
#if (NGX_SOLARIS)
|
||||
if (c->log_error == NGX_ERROR_INFO) {
|
||||
|
||||
/* Solaris returns EINVAL if a socket has been shut down */
|
||||
c->log_error = NGX_ERROR_IGNORE_EINVAL;
|
||||
|
||||
ngx_connection_error(c, ngx_socket_errno,
|
||||
"setsockopt(TCP_NODELAY) failed");
|
||||
|
||||
c->log_error = NGX_ERROR_INFO;
|
||||
|
||||
return NGX_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
ngx_connection_error(c, ngx_socket_errno,
|
||||
"setsockopt(TCP_NODELAY) failed");
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
c->tcp_nodelay = NGX_TCP_NODELAY_SET;
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text)
|
||||
{
|
||||
|
||||
@@ -214,6 +214,7 @@ void ngx_close_connection(ngx_connection_t *c);
|
||||
void ngx_close_idle_connections(ngx_cycle_t *cycle);
|
||||
ngx_int_t ngx_connection_local_sockaddr(ngx_connection_t *c, ngx_str_t *s,
|
||||
ngx_uint_t port);
|
||||
ngx_int_t ngx_tcp_nodelay(ngx_connection_t *c);
|
||||
ngx_int_t ngx_connection_error(ngx_connection_t *c, ngx_err_t err, char *text);
|
||||
|
||||
ngx_connection_t *ngx_get_connection(ngx_socket_t s, ngx_log_t *log);
|
||||
|
||||
@@ -15,6 +15,7 @@ static ngx_int_t ngx_init_zone_pool(ngx_cycle_t *cycle,
|
||||
ngx_shm_zone_t *shm_zone);
|
||||
static ngx_int_t ngx_test_lockfile(u_char *file, ngx_log_t *log);
|
||||
static void ngx_clean_old_cycles(ngx_event_t *ev);
|
||||
static void ngx_shutdown_timer_handler(ngx_event_t *ev);
|
||||
|
||||
|
||||
volatile ngx_cycle_t *ngx_cycle;
|
||||
@@ -22,6 +23,7 @@ ngx_array_t ngx_old_cycles;
|
||||
|
||||
static ngx_pool_t *ngx_temp_pool;
|
||||
static ngx_event_t ngx_cleaner_event;
|
||||
static ngx_event_t ngx_shutdown_event;
|
||||
|
||||
ngx_uint_t ngx_test_config;
|
||||
ngx_uint_t ngx_dump_config;
|
||||
@@ -113,16 +115,14 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
||||
|
||||
n = old_cycle->paths.nelts ? old_cycle->paths.nelts : 10;
|
||||
|
||||
cycle->paths.elts = ngx_pcalloc(pool, n * sizeof(ngx_path_t *));
|
||||
if (cycle->paths.elts == NULL) {
|
||||
if (ngx_array_init(&cycle->paths, pool, n, sizeof(ngx_path_t *))
|
||||
!= NGX_OK)
|
||||
{
|
||||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cycle->paths.nelts = 0;
|
||||
cycle->paths.size = sizeof(ngx_path_t *);
|
||||
cycle->paths.nalloc = n;
|
||||
cycle->paths.pool = pool;
|
||||
ngx_memzero(cycle->paths.elts, n * sizeof(ngx_path_t *));
|
||||
|
||||
|
||||
if (ngx_array_init(&cycle->config_dump, pool, 1, sizeof(ngx_conf_dump_t))
|
||||
@@ -173,16 +173,14 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
|
||||
|
||||
n = old_cycle->listening.nelts ? old_cycle->listening.nelts : 10;
|
||||
|
||||
cycle->listening.elts = ngx_pcalloc(pool, n * sizeof(ngx_listening_t));
|
||||
if (cycle->listening.elts == NULL) {
|
||||
if (ngx_array_init(&cycle->listening, pool, n, sizeof(ngx_listening_t))
|
||||
!= NGX_OK)
|
||||
{
|
||||
ngx_destroy_pool(pool);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
cycle->listening.nelts = 0;
|
||||
cycle->listening.size = sizeof(ngx_listening_t);
|
||||
cycle->listening.nalloc = n;
|
||||
cycle->listening.pool = pool;
|
||||
ngx_memzero(cycle->listening.elts, n * sizeof(ngx_listening_t));
|
||||
|
||||
|
||||
ngx_queue_init(&cycle->reusable_connections_queue);
|
||||
@@ -766,15 +764,15 @@ old_shm_zone_done:
|
||||
}
|
||||
|
||||
n = 10;
|
||||
ngx_old_cycles.elts = ngx_pcalloc(ngx_temp_pool,
|
||||
n * sizeof(ngx_cycle_t *));
|
||||
if (ngx_old_cycles.elts == NULL) {
|
||||
|
||||
if (ngx_array_init(&ngx_old_cycles, ngx_temp_pool, n,
|
||||
sizeof(ngx_cycle_t *))
|
||||
!= NGX_OK)
|
||||
{
|
||||
exit(1);
|
||||
}
|
||||
ngx_old_cycles.nelts = 0;
|
||||
ngx_old_cycles.size = sizeof(ngx_cycle_t *);
|
||||
ngx_old_cycles.nalloc = n;
|
||||
ngx_old_cycles.pool = ngx_temp_pool;
|
||||
|
||||
ngx_memzero(ngx_old_cycles.elts, n * sizeof(ngx_cycle_t *));
|
||||
|
||||
ngx_cleaner_event.handler = ngx_clean_old_cycles;
|
||||
ngx_cleaner_event.log = cycle->log;
|
||||
@@ -1333,3 +1331,54 @@ ngx_clean_old_cycles(ngx_event_t *ev)
|
||||
ngx_old_cycles.nelts = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
ngx_set_shutdown_timer(ngx_cycle_t *cycle)
|
||||
{
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
ccf = (ngx_core_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_core_module);
|
||||
|
||||
if (ccf->shutdown_timeout) {
|
||||
ngx_shutdown_event.handler = ngx_shutdown_timer_handler;
|
||||
ngx_shutdown_event.data = cycle;
|
||||
ngx_shutdown_event.log = cycle->log;
|
||||
ngx_shutdown_event.cancelable = 1;
|
||||
|
||||
ngx_add_timer(&ngx_shutdown_event, ccf->shutdown_timeout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
ngx_shutdown_timer_handler(ngx_event_t *ev)
|
||||
{
|
||||
ngx_uint_t i;
|
||||
ngx_cycle_t *cycle;
|
||||
ngx_connection_t *c;
|
||||
|
||||
cycle = ev->data;
|
||||
|
||||
c = cycle->connections;
|
||||
|
||||
for (i = 0; i < cycle->connection_n; i++) {
|
||||
|
||||
if (c[i].fd == (ngx_socket_t) -1
|
||||
|| c[i].read == NULL
|
||||
|| c[i].read->accept
|
||||
|| c[i].read->channel
|
||||
|| c[i].read->resolver)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_CORE, ev->log, 0,
|
||||
"*%uA shutdown timeout", c[i].number);
|
||||
|
||||
c[i].close = 1;
|
||||
c[i].error = 1;
|
||||
|
||||
c[i].read->handler(c[i].read);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +88,7 @@ typedef struct {
|
||||
ngx_flag_t master;
|
||||
|
||||
ngx_msec_t timer_resolution;
|
||||
ngx_msec_t shutdown_timeout;
|
||||
|
||||
ngx_int_t worker_processes;
|
||||
ngx_int_t debug_points;
|
||||
@@ -129,6 +130,7 @@ ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
|
||||
ngx_cpuset_t *ngx_get_cpu_affinity(ngx_uint_t n);
|
||||
ngx_shm_zone_t *ngx_shared_memory_add(ngx_conf_t *cf, ngx_str_t *name,
|
||||
size_t size, void *tag);
|
||||
void ngx_set_shutdown_timer(ngx_cycle_t *cycle);
|
||||
|
||||
|
||||
extern volatile ngx_cycle_t *ngx_cycle;
|
||||
|
||||
@@ -35,8 +35,10 @@ ngx_murmur_hash2(u_char *data, size_t len)
|
||||
switch (len) {
|
||||
case 3:
|
||||
h ^= data[2] << 16;
|
||||
/* fall through */
|
||||
case 2:
|
||||
h ^= data[1] << 8;
|
||||
/* fall through */
|
||||
case 1:
|
||||
h ^= data[0];
|
||||
h *= 0x5bd1e995;
|
||||
|
||||
@@ -72,9 +72,6 @@ typedef struct {
|
||||
} ngx_pool_cleanup_file_t;
|
||||
|
||||
|
||||
void *ngx_alloc(size_t size, ngx_log_t *log);
|
||||
void *ngx_calloc(size_t size, ngx_log_t *log);
|
||||
|
||||
ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log);
|
||||
void ngx_destroy_pool(ngx_pool_t *pool);
|
||||
void ngx_reset_pool(ngx_pool_t *pool);
|
||||
|
||||
@@ -17,6 +17,11 @@ ngx_parse_size(ngx_str_t *line)
|
||||
ssize_t size, scale, max;
|
||||
|
||||
len = line->len;
|
||||
|
||||
if (len == 0) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
unit = line->data[len - 1];
|
||||
|
||||
switch (unit) {
|
||||
@@ -58,6 +63,11 @@ ngx_parse_offset(ngx_str_t *line)
|
||||
size_t len;
|
||||
|
||||
len = line->len;
|
||||
|
||||
if (len == 0) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
unit = line->data[len - 1];
|
||||
|
||||
switch (unit) {
|
||||
|
||||
@@ -28,7 +28,7 @@ ngx_rbtree_insert(ngx_rbtree_t *tree, ngx_rbtree_node_t *node)
|
||||
|
||||
/* a binary tree insert */
|
||||
|
||||
root = (ngx_rbtree_node_t **) &tree->root;
|
||||
root = &tree->root;
|
||||
sentinel = tree->sentinel;
|
||||
|
||||
if (*root == sentinel) {
|
||||
@@ -161,7 +161,7 @@ ngx_rbtree_delete(ngx_rbtree_t *tree, ngx_rbtree_node_t *node)
|
||||
|
||||
/* a binary tree delete */
|
||||
|
||||
root = (ngx_rbtree_node_t **) &tree->root;
|
||||
root = &tree->root;
|
||||
sentinel = tree->sentinel;
|
||||
|
||||
if (node->left == sentinel) {
|
||||
@@ -378,3 +378,32 @@ ngx_rbtree_right_rotate(ngx_rbtree_node_t **root, ngx_rbtree_node_t *sentinel,
|
||||
temp->right = node;
|
||||
node->parent = temp;
|
||||
}
|
||||
|
||||
|
||||
ngx_rbtree_node_t *
|
||||
ngx_rbtree_next(ngx_rbtree_t *tree, ngx_rbtree_node_t *node)
|
||||
{
|
||||
ngx_rbtree_node_t *root, *sentinel, *parent;
|
||||
|
||||
sentinel = tree->sentinel;
|
||||
|
||||
if (node->right != sentinel) {
|
||||
return ngx_rbtree_min(node->right, sentinel);
|
||||
}
|
||||
|
||||
root = tree->root;
|
||||
|
||||
for ( ;; ) {
|
||||
parent = node->parent;
|
||||
|
||||
if (node == root) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (node == parent->left) {
|
||||
return parent;
|
||||
}
|
||||
|
||||
node = parent;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,6 +54,8 @@ void ngx_rbtree_insert_value(ngx_rbtree_node_t *root, ngx_rbtree_node_t *node,
|
||||
ngx_rbtree_node_t *sentinel);
|
||||
void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *root,
|
||||
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
|
||||
ngx_rbtree_node_t *ngx_rbtree_next(ngx_rbtree_t *tree,
|
||||
ngx_rbtree_node_t *node);
|
||||
|
||||
|
||||
#define ngx_rbt_red(node) ((node)->color = 1)
|
||||
|
||||
@@ -56,8 +56,8 @@ typedef struct {
|
||||
((u_char *) (n) - offsetof(ngx_resolver_node_t, node))
|
||||
|
||||
|
||||
ngx_int_t ngx_udp_connect(ngx_resolver_connection_t *rec);
|
||||
ngx_int_t ngx_tcp_connect(ngx_resolver_connection_t *rec);
|
||||
static ngx_int_t ngx_udp_connect(ngx_resolver_connection_t *rec);
|
||||
static ngx_int_t ngx_tcp_connect(ngx_resolver_connection_t *rec);
|
||||
|
||||
|
||||
static void ngx_resolver_cleanup(void *data);
|
||||
@@ -4379,7 +4379,7 @@ ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len)
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
static ngx_int_t
|
||||
ngx_udp_connect(ngx_resolver_connection_t *rec)
|
||||
{
|
||||
int rc;
|
||||
@@ -4463,7 +4463,7 @@ failed:
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
static ngx_int_t
|
||||
ngx_tcp_connect(ngx_resolver_connection_t *rec)
|
||||
{
|
||||
int rc;
|
||||
|
||||
@@ -1808,7 +1808,19 @@ ngx_escape_json(u_char *dst, u_char *src, size_t size)
|
||||
len++;
|
||||
|
||||
} else if (ch <= 0x1f) {
|
||||
len += sizeof("\\u001F") - 2;
|
||||
|
||||
switch (ch) {
|
||||
case '\n':
|
||||
case '\r':
|
||||
case '\t':
|
||||
case '\b':
|
||||
case '\f':
|
||||
len++;
|
||||
break;
|
||||
|
||||
default:
|
||||
len += sizeof("\\u001F") - 2;
|
||||
}
|
||||
}
|
||||
|
||||
size--;
|
||||
@@ -1829,12 +1841,37 @@ ngx_escape_json(u_char *dst, u_char *src, size_t size)
|
||||
*dst++ = ch;
|
||||
|
||||
} else {
|
||||
*dst++ = '\\'; *dst++ = 'u'; *dst++ = '0'; *dst++ = '0';
|
||||
*dst++ = '0' + (ch >> 4);
|
||||
*dst++ = '\\';
|
||||
|
||||
ch &= 0xf;
|
||||
switch (ch) {
|
||||
case '\n':
|
||||
*dst++ = 'n';
|
||||
break;
|
||||
|
||||
*dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10);
|
||||
case '\r':
|
||||
*dst++ = 'r';
|
||||
break;
|
||||
|
||||
case '\t':
|
||||
*dst++ = 't';
|
||||
break;
|
||||
|
||||
case '\b':
|
||||
*dst++ = 'b';
|
||||
break;
|
||||
|
||||
case '\f':
|
||||
*dst++ = 'f';
|
||||
break;
|
||||
|
||||
default:
|
||||
*dst++ = 'u'; *dst++ = '0'; *dst++ = '0';
|
||||
*dst++ = '0' + (ch >> 4);
|
||||
|
||||
ch &= 0xf;
|
||||
|
||||
*dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10);
|
||||
}
|
||||
}
|
||||
|
||||
size--;
|
||||
|
||||
Reference in New Issue
Block a user