Mercurial > hg > nginx
comparison src/http/modules/ngx_http_map_module.c @ 4814:0656cfe8f7cb
Map: fixed optimization of variables as values.
Previous code incorrectly used ctx->var_values as an array of pointers to
ngx_http_variable_value_t, but the array contains structures, not pointers.
Additionally, ctx->var_values inspection failed to properly set var on
match.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 16 Aug 2012 10:58:18 +0000 |
parents | fd3eefefa5f9 |
children | 6e46016ea276 |
comparison
equal
deleted
inserted
replaced
4813:5c47ecaef07a | 4814:0656cfe8f7cb |
---|---|
414 | 414 |
415 var = ctx->var_values.elts; | 415 var = ctx->var_values.elts; |
416 | 416 |
417 for (i = 0; i < ctx->var_values.nelts; i++) { | 417 for (i = 0; i < ctx->var_values.nelts; i++) { |
418 if (index == (ngx_int_t) var[i].data) { | 418 if (index == (ngx_int_t) var[i].data) { |
419 var = &var[i]; | |
419 goto found; | 420 goto found; |
420 } | 421 } |
421 } | 422 } |
422 | 423 |
423 var = ngx_palloc(ctx->keys.pool, sizeof(ngx_http_variable_value_t)); | 424 var = ngx_array_push(&ctx->var_values); |
424 if (var == NULL) { | 425 if (var == NULL) { |
425 return NGX_CONF_ERROR; | 426 return NGX_CONF_ERROR; |
426 } | 427 } |
427 | 428 |
428 var->valid = 0; | 429 var->valid = 0; |
429 var->no_cacheable = 0; | 430 var->no_cacheable = 0; |
430 var->not_found = 0; | 431 var->not_found = 0; |
431 var->len = 0; | 432 var->len = 0; |
432 var->data = (u_char *) index; | 433 var->data = (u_char *) index; |
433 | 434 |
434 vp = ngx_array_push(&ctx->var_values); | |
435 if (vp == NULL) { | |
436 return NGX_CONF_ERROR; | |
437 } | |
438 | |
439 *vp = var; | |
440 | |
441 goto found; | 435 goto found; |
442 } | 436 } |
443 | 437 |
444 key = 0; | 438 key = 0; |
445 | 439 |