comparison src/http/modules/ngx_http_geo_module.c @ 2369:12e8e0045096 radix_with_skip

add radix tree skip node
author Igor Sysoev <igor@sysoev.ru>
date Wed, 03 Dec 2008 13:26:02 +0000
parents 8522a901df2f
children
comparison
equal deleted inserted replaced
2368:62be1c4edfba 2369:12e8e0045096
169 ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 169 ngx_http_geo_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
170 { 170 {
171 char *rv; 171 char *rv;
172 size_t len; 172 size_t len;
173 ngx_str_t *value, name; 173 ngx_str_t *value, name;
174 ngx_uint_t i; 174 ngx_uint_t i, count;
175 ngx_conf_t save; 175 ngx_conf_t save;
176 ngx_pool_t *pool; 176 ngx_pool_t *pool;
177 ngx_array_t *a; 177 ngx_array_t *a;
178 ngx_http_variable_t *var; 178 ngx_http_variable_t *var;
179 ngx_http_geo_conf_ctx_t ctx; 179 ngx_http_geo_conf_ctx_t ctx;
266 var->data = (uintptr_t) ctx.tree; 266 var->data = (uintptr_t) ctx.tree;
267 267
268 ngx_destroy_pool(ctx.temp_pool); 268 ngx_destroy_pool(ctx.temp_pool);
269 ngx_destroy_pool(pool); 269 ngx_destroy_pool(pool);
270 270
271 if (ngx_radix32tree_find(ctx.tree, 0) != NGX_RADIX_NO_VALUE) { 271 if (ngx_radix32tree_find(ctx.tree, 0) == NGX_RADIX_NO_VALUE) {
272 return rv; 272
273 } 273 if (ngx_radix32tree_insert(ctx.tree, 0, 0,
274 274 (uintptr_t) &ngx_http_variable_null_value)
275 if (ngx_radix32tree_insert(ctx.tree, 0, 0, 275 == NGX_ERROR)
276 (uintptr_t) &ngx_http_variable_null_value) 276 {
277 == NGX_ERROR) 277 return NGX_CONF_ERROR;
278 { 278 }
279 return NGX_CONF_ERROR; 279 }
280 } 280
281 count = ctx.tree->count;
282
283 ngx_radix32tree_compress(ctx.tree);
284
285 ngx_log_error(NGX_LOG_NOTICE, cf->log, 0,
286 "\"%V\" geo tree has been compressed as %ui/%ui",
287 &name, ctx.tree->count, count);
281 } 288 }
282 289
283 return rv; 290 return rv;
284 } 291 }
285 292