mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-08 06:17:26 +00:00
[BUG] stream_sock: disable I/O on fds reporting an error
Upon read or write error, we cannot immediately close the FD because we want to first report the error to the upper layer which will do it itself. However, we want to prevent any further I/O from being performed on the FD. This is especially important in case of speculative I/O where nothing else could stop the FD from still being polled until the upper layer takes care of the condition.
This commit is contained in:
parent
1eead503da
commit
1714e0ffda
@ -495,6 +495,7 @@ int stream_sock_read(int fd) {
|
||||
|
||||
fdtab[fd].state = FD_STERROR;
|
||||
fdtab[fd].ev &= ~FD_POLL_STICKY;
|
||||
EV_FD_REM(fd);
|
||||
si->flags |= SI_FL_ERR;
|
||||
retval = 1;
|
||||
goto out_wakeup;
|
||||
@ -756,6 +757,7 @@ int stream_sock_write(int fd)
|
||||
|
||||
fdtab[fd].state = FD_STERROR;
|
||||
fdtab[fd].ev &= ~FD_POLL_STICKY;
|
||||
EV_FD_REM(fd);
|
||||
si->flags |= SI_FL_ERR;
|
||||
task_wakeup(si->owner, TASK_WOKEN_IO);
|
||||
return 1;
|
||||
@ -972,6 +974,7 @@ void stream_sock_chk_snd(struct stream_interface *si)
|
||||
*/
|
||||
fdtab[si->fd].state = FD_STERROR;
|
||||
fdtab[si->fd].ev &= ~FD_POLL_STICKY;
|
||||
EV_FD_REM(si->fd);
|
||||
si->flags |= SI_FL_ERR;
|
||||
goto out_wakeup;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user