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