From 68eac13217fa4f4015e30920644670087c0660b9 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 9 Jan 2009 11:38:52 +0100 Subject: [PATCH] [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. --- src/stream_sock.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/stream_sock.c b/src/stream_sock.c index 16d7c5404..59fc3e626 100644 --- a/src/stream_sock.c +++ b/src/stream_sock.c @@ -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;