Changes between Initial Version and Version 1 of Ticket #1468, comment 13


Ignore:
Timestamp:
01/26/18 12:06:09 (6 years ago)
Author:
Krzysztof Malinowski

Legend:

Unmodified
Added
Removed
Modified
  • Ticket #1468, comment 13

    initial v1  
    1818      - processes client connection (handler: `ngx_http_read_client_request_body_handler()`) which terminates connection with 408 due to expired timer
    1919
    20 It seems to me that to trigger the issue two EAGAINs need to happen on the client connection: first one sets the timer and the second (if comes after `client_body_request_timeout`) will terminate the connection. This would not happen if the current time stamp was updated more often. Unfortunately [http://nginx.org/r/timer_resolution timer_resolution] will not help, as the signal handler only sets the flag for `ngx_process_events()` to update the time stamp, so it will not happen before returning to the main loop anyway.
     20It seems to me that to trigger the issue one EAGAIN is sufficient on the client connection: if processing request took more than `client_body_request_timeout`, EAGAIN will cause time update and immediate timer expiration, which will then terminate the connection. This would not happen if the current time stamp was updated more often. Unfortunately [http://nginx.org/r/timer_resolution timer_resolution] will not help, as the signal handler only sets the flag for `ngx_process_events()` to update the time stamp, so it will not happen before returning to the main loop anyway.
    2121
    2222I still consider this behavior a bug. When a timer is set, it is set with current time being already in the past, so the timeout is inaccurate.