[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.
diff --git a/src/stream_sock.c b/src/stream_sock.c
index 16d7c54..59fc3e6 100644
--- a/src/stream_sock.c
+++ b/src/stream_sock.c
@@ -79,16 +79,8 @@
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 @@
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 @@
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;