mirror of
https://github.com/nginx/nginx.git
synced 2025-06-09 02:42:48 +08:00
undo the previous wrong commit
This commit is contained in:
parent
e6d99d831c
commit
0593b63c6a
@ -47,7 +47,48 @@ ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tree->insert(*root, node, sentinel);
|
/*
|
||||||
|
* The rbtree is currently used by event timers only. Timer values
|
||||||
|
* 1) are spread in small range, usually several minutes,
|
||||||
|
* 2) and overflow each 49 days, if milliseconds are stored in 32 bits.
|
||||||
|
* The below comparison takes into account that overflow.
|
||||||
|
*
|
||||||
|
* If there will be a necessity to use the rbtree for values with
|
||||||
|
* other comparison rules, then a whole "for ( ;; )" loop should
|
||||||
|
* be made as tree->insert() function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
temp = *root;
|
||||||
|
|
||||||
|
for ( ;; ) {
|
||||||
|
|
||||||
|
/* node->key < temp->key */
|
||||||
|
|
||||||
|
if ((ngx_rbtree_key_int_t) node->key - (ngx_rbtree_key_int_t) temp->key
|
||||||
|
< 0)
|
||||||
|
{
|
||||||
|
if (temp->left == sentinel) {
|
||||||
|
temp->left = node;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = temp->left;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (temp->right == sentinel) {
|
||||||
|
temp->right = node;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp = temp->right;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
node->parent = temp;
|
||||||
|
node->left = sentinel;
|
||||||
|
node->right = sentinel;
|
||||||
|
|
||||||
|
|
||||||
/* re-balance tree */
|
/* re-balance tree */
|
||||||
|
|
||||||
@ -95,53 +136,13 @@ ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,
|
|||||||
ngx_rbtree_left_rotate(root, sentinel, node->parent->parent);
|
ngx_rbtree_left_rotate(root, sentinel, node->parent->parent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_rbt_black(*root);
|
ngx_rbt_black(*root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *temp, ngx_rbtree_node_t *node,
|
|
||||||
ngx_rbtree_node_t *sentinel)
|
|
||||||
{
|
|
||||||
for ( ;; ) {
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Timer values
|
|
||||||
* 1) are spread in small range, usually several minutes,
|
|
||||||
* 2) and overflow each 49 days, if milliseconds are stored in 32 bits.
|
|
||||||
* The comparison takes into account that overflow.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((ngx_rbtree_key_int_t) node->key - (ngx_rbtree_key_int_t) temp->key
|
|
||||||
< 0)
|
|
||||||
{
|
|
||||||
/* node->key < temp->key */
|
|
||||||
|
|
||||||
if (temp->left == sentinel) {
|
|
||||||
temp->left = node;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = temp->left;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (temp->right == sentinel) {
|
|
||||||
temp->right = node;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = temp->right;
|
|
||||||
}
|
|
||||||
|
|
||||||
node->parent = temp;
|
|
||||||
node->left = sentinel;
|
|
||||||
node->right = sentinel;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,
|
ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,
|
||||||
ngx_rbtree_node_t *node)
|
ngx_rbtree_node_t *node)
|
||||||
|
@ -29,13 +29,13 @@ struct ngx_rbtree_node_s {
|
|||||||
|
|
||||||
typedef struct ngx_rbtree_s ngx_rbtree_t;
|
typedef struct ngx_rbtree_s ngx_rbtree_t;
|
||||||
|
|
||||||
typedef void (*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,
|
typedef ngx_rbtree_node_t *(*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,
|
||||||
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
|
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
|
||||||
|
|
||||||
struct ngx_rbtree_s {
|
struct ngx_rbtree_s {
|
||||||
ngx_rbtree_node_t *root;
|
ngx_rbtree_node_t *root;
|
||||||
ngx_rbtree_node_t *sentinel;
|
ngx_rbtree_node_t *sentinel;
|
||||||
ngx_rbtree_insert_pt insert;
|
/* ngx_rbtree_insert_pt insert; */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -43,8 +43,6 @@ void ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,
|
|||||||
ngx_rbtree_node_t *node);
|
ngx_rbtree_node_t *node);
|
||||||
void ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,
|
void ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,
|
||||||
ngx_rbtree_node_t *node);
|
ngx_rbtree_node_t *node);
|
||||||
void ngx_rbtree_insert_timer_value(ngx_rbtree_node_t *root,
|
|
||||||
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
|
|
||||||
|
|
||||||
|
|
||||||
static ngx_inline ngx_rbtree_node_t *
|
static ngx_inline ngx_rbtree_node_t *
|
||||||
|
@ -4,41 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
typedef struct ngx_slab_map_s ngx_slab_map_t;
|
|
||||||
|
|
||||||
struct ngx_http_slab_map_s {
|
void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size)
|
||||||
uintptr_t mask;
|
|
||||||
ngx_slab_elt_t *next;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
ngx_slab_elt_t *slabs;
|
|
||||||
|
|
||||||
ngx_slab_elt_t *map;
|
|
||||||
size_t map_size;
|
|
||||||
|
|
||||||
size_t size;
|
|
||||||
|
|
||||||
} ngx_slab_t;
|
|
||||||
|
|
||||||
|
|
||||||
void *
|
|
||||||
ngx_slab_init(ngx_slab_pool_t *pool, size_t size)
|
|
||||||
{
|
{
|
||||||
slab->map_size = (slab->size + ngx_pagesize - 1)
|
|
||||||
/ (ngx_pagesize / sizeof(ngx_slab_map_t));
|
|
||||||
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *
|
|
||||||
ngx_slab_alloc(ngx_slab_t *pool, size_t size)
|
|
||||||
{
|
|
||||||
n = size - 1;
|
|
||||||
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -688,8 +688,8 @@ ngx_decode_base64(ngx_str_t *dst, ngx_str_t *src)
|
|||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
u_char *d, *s;
|
u_char *d, *s;
|
||||||
static u_char basis64[] = {
|
static u_char basis64[] =
|
||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
{ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 62, 77, 77, 77, 63,
|
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 62, 77, 77, 77, 63,
|
||||||
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 77, 77, 77, 77, 77,
|
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 77, 77, 77, 77, 77,
|
||||||
@ -705,8 +705,7 @@ ngx_decode_base64(ngx_str_t *dst, ngx_str_t *src)
|
|||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
|
||||||
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77
|
77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77 };
|
||||||
};
|
|
||||||
|
|
||||||
for (len = 0; len < src->len; len++) {
|
for (len = 0; len < src->len; len++) {
|
||||||
if (src->data[len] == '=') {
|
if (src->data[len] == '=') {
|
||||||
@ -894,8 +893,8 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
|||||||
|
|
||||||
/* " ", "#", "%", "?", %00-%1F, %7F-%FF */
|
/* " ", "#", "%", "?", %00-%1F, %7F-%FF */
|
||||||
|
|
||||||
static uint32_t uri[] = {
|
static uint32_t uri[] =
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
|
|
||||||
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
||||||
0x80000029, /* 1000 0000 0000 0000 0000 0000 0010 1001 */
|
0x80000029, /* 1000 0000 0000 0000 0000 0000 0010 1001 */
|
||||||
@ -909,13 +908,12 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
|||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ };
|
||||||
};
|
|
||||||
|
|
||||||
/* " ", "#", "%", "+", "?", %00-%1F, %7F-%FF */
|
/* " ", "#", "%", "+", "?", %00-%1F, %7F-%FF */
|
||||||
|
|
||||||
static uint32_t args[] = {
|
static uint32_t args[] =
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
|
|
||||||
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
||||||
0x80000829, /* 1000 0000 0000 0000 0000 1000 0010 1001 */
|
0x80000829, /* 1000 0000 0000 0000 0000 1000 0010 1001 */
|
||||||
@ -929,13 +927,12 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
|||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ };
|
||||||
};
|
|
||||||
|
|
||||||
/* " ", """, "%", "'", %00-%1F, %7F-%FF */
|
/* " ", """, "%", "'", %00-%1F, %7F-%FF */
|
||||||
|
|
||||||
static uint32_t html[] = {
|
static uint32_t html[] =
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
|
|
||||||
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
||||||
0x800000ad, /* 0000 0000 0000 0000 0000 0000 1010 1101 */
|
0x800000ad, /* 0000 0000 0000 0000 0000 0000 1010 1101 */
|
||||||
@ -949,8 +946,7 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
|
|||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ };
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -23,7 +23,6 @@ ngx_event_timer_init(ngx_log_t *log)
|
|||||||
{
|
{
|
||||||
ngx_event_timer_rbtree.root = &ngx_event_timer_sentinel;
|
ngx_event_timer_rbtree.root = &ngx_event_timer_sentinel;
|
||||||
ngx_event_timer_rbtree.sentinel = &ngx_event_timer_sentinel;
|
ngx_event_timer_rbtree.sentinel = &ngx_event_timer_sentinel;
|
||||||
ngx_event_timer_rbtree.insert = ngx_rbtree_insert_timer_value;
|
|
||||||
|
|
||||||
#if (NGX_THREADS)
|
#if (NGX_THREADS)
|
||||||
|
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
#include <ngx_http.h>
|
#include <ngx_http.h>
|
||||||
|
|
||||||
|
|
||||||
static uint32_t usual[] = {
|
static uint32_t usual[] =
|
||||||
0xffffdbfe, /* 1111 1111 1111 1111 1101 1011 1111 1110 */
|
{ 0xffffdbfe, /* 1111 1111 1111 1111 1101 1011 1111 1110 */
|
||||||
|
|
||||||
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
|
||||||
0x7fff37d6, /* 0111 1111 1111 1111 0011 0111 1101 0110 */
|
0x7fff37d6, /* 0111 1111 1111 1111 0011 0111 1101 0110 */
|
||||||
@ -24,8 +24,7 @@ static uint32_t usual[] = {
|
|||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||||
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ };
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/* gcc, icc, msvc and others compile these switches as an jump table */
|
/* gcc, icc, msvc and others compile these switches as an jump table */
|
||||||
|
Loading…
Reference in New Issue
Block a user