comparison src/http/ngx_http_core_module.c @ 8374:1ebd78df4ce7

Fixed handling of already closed connections. In limit_req, auth_delay, and upstream code to check for broken connections, tests for possible connection close by the client did not work if the connection was already closed when relevant event handler was set. This happened because there were no additional events in case of edge-triggered event methods, and read events were disabled in case of level-triggered ones. Fix is to explicitly post a read event if the c->read->ready flag is set.
author Maxim Dounin <mdounin@mdounin.ru>
date Sun, 28 Mar 2021 17:45:39 +0300
parents de0b6f1fe4e4
children f1986657fc26 fdc3d40979b0
comparison
equal deleted inserted replaced
8373:1bf8ab7063de 8374:1ebd78df4ce7
1188 } 1188 }
1189 1189
1190 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, 1190 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
1191 "delaying unauthorized request"); 1191 "delaying unauthorized request");
1192 1192
1193 if (ngx_handle_read_event(r->connection->read, 0) != NGX_OK) { 1193 if (r->connection->read->ready) {
1194 return NGX_HTTP_INTERNAL_SERVER_ERROR; 1194 ngx_post_event(r->connection->read, &ngx_posted_events);
1195
1196 } else {
1197 if (ngx_handle_read_event(r->connection->read, 0) != NGX_OK) {
1198 return NGX_HTTP_INTERNAL_SERVER_ERROR;
1199 }
1195 } 1200 }
1196 1201
1197 r->read_event_handler = ngx_http_test_reading; 1202 r->read_event_handler = ngx_http_test_reading;
1198 r->write_event_handler = ngx_http_core_auth_delay_handler; 1203 r->write_event_handler = ngx_http_core_auth_delay_handler;
1199 1204