bad commit

This commit is contained in:
Igor Sysoev 2006-10-28 14:20:13 +00:00
parent a994bd0ae2
commit e6d99d831c
6 changed files with 158 additions and 118 deletions

View File

@ -47,48 +47,7 @@ ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,
return;
}
/*
* 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;
tree->insert(*root, node, sentinel);
/* re-balance tree */
@ -136,13 +95,53 @@ ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,
ngx_rbtree_left_rotate(root, sentinel, node->parent->parent);
}
}
}
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
ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,
ngx_rbtree_node_t *node)

View File

@ -29,13 +29,13 @@ struct ngx_rbtree_node_s {
typedef struct ngx_rbtree_s ngx_rbtree_t;
typedef ngx_rbtree_node_t *(*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,
typedef void (*ngx_rbtree_insert_pt) (ngx_rbtree_node_t *root,
ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel);
struct ngx_rbtree_s {
ngx_rbtree_node_t *root;
ngx_rbtree_node_t *sentinel;
/* ngx_rbtree_insert_pt insert; */
ngx_rbtree_insert_pt insert;
};
@ -43,6 +43,8 @@ void ngx_rbtree_insert(ngx_thread_volatile ngx_rbtree_t *tree,
ngx_rbtree_node_t *node);
void ngx_rbtree_delete(ngx_thread_volatile ngx_rbtree_t *tree,
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 *

View File

@ -4,8 +4,41 @@
*/
typedef struct ngx_slab_map_s ngx_slab_map_t;
void *ngx_slab_alloc(ngx_slab_pool_t *pool, size_t size)
struct ngx_http_slab_map_s {
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;
}

View File

@ -688,8 +688,8 @@ ngx_decode_base64(ngx_str_t *dst, ngx_str_t *src)
{
size_t len;
u_char *d, *s;
static u_char basis64[] =
{ 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
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, 62, 77, 77, 77, 63,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 77, 77, 77, 77, 77,
@ -705,7 +705,8 @@ 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
};
for (len = 0; len < src->len; len++) {
if (src->data[len] == '=') {
@ -893,8 +894,8 @@ ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
/* " ", "#", "%", "?", %00-%1F, %7F-%FF */
static uint32_t uri[] =
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
static uint32_t uri[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
0x80000029, /* 1000 0000 0000 0000 0000 0000 0010 1001 */
@ -908,12 +909,13 @@ 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 */
};
/* " ", "#", "%", "+", "?", %00-%1F, %7F-%FF */
static uint32_t args[] =
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
static uint32_t args[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
0x80000829, /* 1000 0000 0000 0000 0000 1000 0010 1001 */
@ -927,12 +929,13 @@ 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 */
};
/* " ", """, "%", "'", %00-%1F, %7F-%FF */
static uint32_t html[] =
{ 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
static uint32_t html[] = {
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
0x800000ad, /* 0000 0000 0000 0000 0000 0000 1010 1101 */
@ -946,7 +949,8 @@ 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 */
};
switch (type) {

View File

@ -23,6 +23,7 @@ ngx_event_timer_init(ngx_log_t *log)
{
ngx_event_timer_rbtree.root = &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)

View File

@ -9,8 +9,8 @@
#include <ngx_http.h>
static uint32_t usual[] =
{ 0xffffdbfe, /* 1111 1111 1111 1111 1101 1011 1111 1110 */
static uint32_t usual[] = {
0xffffdbfe, /* 1111 1111 1111 1111 1101 1011 1111 1110 */
/* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
0x7fff37d6, /* 0111 1111 1111 1111 0011 0111 1101 0110 */
@ -24,7 +24,8 @@ 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 */
};
/* gcc, icc, msvc and others compile these switches as an jump table */