Mercurial > hg > nginx
changeset 8111:56819a9491fe
Win32: event flags handling edge cases in ngx_wsarecv().
Fixed event flags handling edge cases in ngx_wsarecv() and ngx_wsarecv_chain(),
notably to always reset rev->ready in case of errors (which wasn't the case
after ngx_socket_nread() errors), and after EOF (rev->ready was not cleared
if due to a misconfiguration a zero-sized buffer was used for reading).
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 01 Dec 2022 04:22:36 +0300 |
parents | 06c7d84cafdb |
children | 9ed5778f5d4a |
files | src/os/win32/ngx_wsarecv.c src/os/win32/ngx_wsarecv_chain.c |
diffstat | 2 files changed, 4 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os/win32/ngx_wsarecv.c Thu Dec 01 04:22:31 2022 +0300 +++ b/src/os/win32/ngx_wsarecv.c Thu Dec 01 04:22:36 2022 +0300 @@ -78,6 +78,7 @@ ngx_socket_nread_n " failed"); if (n == NGX_ERROR) { + rev->ready = 0; rev->error = 1; } @@ -95,6 +96,7 @@ } if (bytes == 0) { + rev->ready = 0; rev->eof = 1; }
--- a/src/os/win32/ngx_wsarecv_chain.c Thu Dec 01 04:22:31 2022 +0300 +++ b/src/os/win32/ngx_wsarecv_chain.c Thu Dec 01 04:22:36 2022 +0300 @@ -121,6 +121,7 @@ } else if (bytes == size) { if (ngx_socket_nread(c->fd, &rev->available) == -1) { + rev->ready = 0; rev->error = 1; ngx_connection_error(c, ngx_socket_errno, ngx_socket_nread_n " failed"); @@ -138,6 +139,7 @@ } if (bytes == 0) { + rev->ready = 0; rev->eof = 1; }