comparison src/http/modules/ngx_http_limit_req_module.c @ 3183:b87542338ac3

make limit_req to conform to the leaky bucket algorithm
author Igor Sysoev <igor@sysoev.ru>
date Tue, 06 Oct 2009 09:37:18 +0000
parents 70c8b2d28d1d
children 30570a5b9bb0
comparison
equal deleted inserted replaced
3182:6ddaac3e0bf7 3183:b87542338ac3
377 now = (ngx_msec_t) (tp->sec * 1000 + tp->msec); 377 now = (ngx_msec_t) (tp->sec * 1000 + tp->msec);
378 ms = (ngx_msec_int_t) (now - lr->last); 378 ms = (ngx_msec_int_t) (now - lr->last);
379 379
380 excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000; 380 excess = lr->excess - ctx->rate * ngx_abs(ms) / 1000 + 1000;
381 381
382 if ((ngx_uint_t) excess > lrcf->burst) {
383 *lrp = lr;
384 return NGX_BUSY;
385 }
386
382 if (excess < 0) { 387 if (excess < 0) {
383 excess = 0; 388 excess = 0;
384 } 389 }
385 390
386 lr->excess = excess; 391 lr->excess = excess;
387 lr->last = now; 392 lr->last = now;
388 393
389 *lrp = lr; 394 *lrp = lr;
390
391 if ((ngx_uint_t) excess > lrcf->burst) {
392 return NGX_BUSY;
393 }
394 395
395 if (excess) { 396 if (excess) {
396 return NGX_AGAIN; 397 return NGX_AGAIN;
397 } 398 }
398 399