MINOR: stream-int: use si_cant_put() instead of setting SI_FL_WAIT_ROOM
We now do this on the si_cs_recv() path so that we always have
SI_FL_WANT_PUT properly set when there's a need to receive and
SI_FL_WAIT_ROOM upon failure.
diff --git a/include/proto/stream_interface.h b/include/proto/stream_interface.h
index c320784..c2c5310 100644
--- a/include/proto/stream_interface.h
+++ b/include/proto/stream_interface.h
@@ -330,7 +330,7 @@
si->flags &= ~SI_FL_WAIT_ROOM;
ret = channel_alloc_buffer(si_ic(si), wait);
if (!ret)
- si->flags |= SI_FL_WAIT_ROOM;
+ si_cant_put(si);
return ret;
}
diff --git a/src/stream_interface.c b/src/stream_interface.c
index f2fa791..7eb9e9c 100644
--- a/src/stream_interface.c
+++ b/src/stream_interface.c
@@ -756,7 +756,7 @@
/* stop reading */
if (!(si->flags & SI_FL_WAIT_ROOM)) {
if (!(ic->flags & CF_DONT_READ)) /* full */
- si->flags |= SI_FL_WAIT_ROOM;
+ si_cant_put(si);
ic->rex = TICK_ETERNITY;
}
}
@@ -1098,6 +1098,9 @@
if (si->wait_event.wait_reason & SUB_CAN_RECV)
return 0;
+ /* by default nothing to deliver */
+ si_stop_put(si);
+
/* maybe we were called immediately after an asynchronous shutr */
if (ic->flags & CF_SHUTR)
return 1;
@@ -1165,7 +1168,7 @@
/* the pipe is full or we have read enough data that it
* could soon be full. Let's stop before needing to poll.
*/
- si->flags |= SI_FL_WAIT_ROOM;
+ si_cant_put(si);
}
/* splice not possible (anymore), let's go on on standard copy */
@@ -1191,13 +1194,13 @@
max = channel_recv_max(ic);
if (!max) {
- si->flags |= SI_FL_WAIT_ROOM;
+ si_cant_put(si);
break;
}
ret = cs->conn->mux->rcv_buf(cs, &ic->buf, max, co_data(ic) ? CO_RFL_BUF_WET : 0);
if (cs->flags & CS_FL_RCV_MORE)
- si->flags |= SI_FL_WAIT_ROOM;
+ si_cant_put(si);
if (ret <= 0)
break;
@@ -1219,7 +1222,7 @@
ic->total += ret;
if (!channel_may_recv(ic)) {
- si->flags |= SI_FL_WAIT_ROOM;
+ si_cant_put(si);
break;
}