MINOR: stream-int: Factorize processing done after sending data in si_cs_send()
In the function si_cs_send(), what is done when an error occurred on the
connection or the conn_stream or when some successfully data was send via a pipe
or the channel's buffer may be factorized at the function. It slightly simplify
the function.
This patch must be backported to 2.0 and 1.9 because a bugfix depends on it.
diff --git a/src/stream_interface.c b/src/stream_interface.c
index 950f55b..481938f 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -669,23 +669,14 @@
if (oc->pipe && conn->xprt->snd_pipe && conn->mux->snd_pipe) {
ret = conn->mux->snd_pipe(cs, oc->pipe);
- if (ret > 0) {
- oc->flags |= CF_WRITE_PARTIAL | CF_WROTE_DATA;
+ if (ret > 0)
did_send = 1;
- if (si->state == SI_ST_CON)
- si->state = SI_ST_RDY;
- }
if (!oc->pipe->data) {
put_pipe(oc->pipe);
oc->pipe = NULL;
}
- if (conn->flags & CO_FL_ERROR || cs->flags & (CS_FL_ERROR|CS_FL_ERR_PENDING)) {
- si->flags |= SI_FL_ERR;
- return 1;
- }
-
if (oc->pipe)
goto end;
}
@@ -752,10 +743,6 @@
ret = cs->conn->mux->snd_buf(cs, &oc->buf, co_data(oc), send_flag);
if (ret > 0) {
did_send = 1;
- oc->flags |= CF_WRITE_PARTIAL | CF_WROTE_DATA;
- if (si->state == SI_ST_CON)
- si->state = SI_ST_RDY;
-
co_set_data(oc, co_data(oc) - ret);
c_realign_if_empty(oc);
@@ -763,19 +750,24 @@
/* Always clear both flags once everything has been sent, they're one-shot */
oc->flags &= ~(CF_EXPECT_MORE | CF_SEND_DONTWAIT);
}
-
/* if some data remain in the buffer, it's only because the
* system buffers are full, we will try next time.
*/
}
-
- if (conn->flags & CO_FL_ERROR || cs->flags & (CS_FL_ERROR|CS_FL_ERR_PENDING)) {
- si->flags |= SI_FL_ERR;
- return 1;
- }
}
end:
+ if (did_send) {
+ oc->flags |= CF_WRITE_PARTIAL | CF_WROTE_DATA;
+ if (si->state == SI_ST_CON)
+ si->state = SI_ST_RDY;
+ }
+
+ if (conn->flags & CO_FL_ERROR || cs->flags & (CS_FL_ERROR|CS_FL_ERR_PENDING)) {
+ si->flags |= SI_FL_ERR;
+ return 1;
+ }
+
/* We couldn't send all of our data, let the mux know we'd like to send more */
if (!channel_is_empty(oc))
conn->mux->subscribe(cs, SUB_RETRY_SEND, &si->wait_event);