mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-05-04 12:41:00 +02:00
[OPTIM] stream_sock: factor out the buffer full handling out of the loop
Handling the buffer full condition is not trivial and this code was duplicated inside the loop. Move it out of the loop at a single place.
This commit is contained in:
parent
03d60bbaf9
commit
68eac13217
@ -79,16 +79,8 @@ int stream_sock_read(int fd) {
|
||||
max = b->max_len;
|
||||
}
|
||||
|
||||
if (unlikely(max == 0)) {
|
||||
/* Not anymore room to store data. This should theorically
|
||||
* never happen, but better safe than sorry !
|
||||
*/
|
||||
si->flags |= SI_FL_WAIT_ROOM;
|
||||
b->flags |= BF_FULL;
|
||||
EV_FD_CLR(fd, DIR_RD);
|
||||
b->rex = TICK_ETERNITY;
|
||||
goto out_wakeup;
|
||||
}
|
||||
if (max == 0)
|
||||
goto out_full;
|
||||
|
||||
/*
|
||||
* 2. read the largest possible block
|
||||
@ -163,12 +155,7 @@ int stream_sock_read(int fd) {
|
||||
b->xfer_small = 0;
|
||||
b->xfer_large = 0;
|
||||
}
|
||||
|
||||
si->flags |= SI_FL_WAIT_ROOM;
|
||||
b->flags |= BF_FULL;
|
||||
EV_FD_CLR(fd, DIR_RD);
|
||||
b->rex = TICK_ETERNITY;
|
||||
goto out_wakeup;
|
||||
goto out_full;
|
||||
}
|
||||
|
||||
/* if too many bytes were missing from last read, it means that
|
||||
@ -270,6 +257,13 @@ int stream_sock_read(int fd) {
|
||||
fdtab[fd].ev &= ~FD_POLL_IN;
|
||||
return retval;
|
||||
|
||||
out_full:
|
||||
si->flags |= SI_FL_WAIT_ROOM;
|
||||
b->flags |= BF_FULL;
|
||||
EV_FD_CLR(fd, DIR_RD);
|
||||
b->rex = TICK_ETERNITY;
|
||||
goto out_wakeup;
|
||||
|
||||
out_shutdown_r:
|
||||
/* we received a shutdown */
|
||||
fdtab[fd].ev &= ~FD_POLL_HUP;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user