MEDIUM: stream-int/conn-stream: Handle I/O subscriptions in the conn-stream
wait_event structure is moved in the conn-stream. The tasklet is only
created if the conn-stream is attached to a mux and released when the mux is
detached. This implies a subtle change. In stream_int_chk_rcv() function,
the wakeup of the tasklet was removed because there is no longer tasklet at
this stage (stream_int_chk_rcv() is a callback function of si_embedded_ops).
diff --git a/src/stream.c b/src/stream.c
index ec6e1f6..ec7c159 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -1502,9 +1502,8 @@
* mux will probably want to subscribe to
* the underlying XPRT
*/
- if (cs_si(s->csf)->wait_event.events)
- conn->mux->unsubscribe(cs, cs_si(s->csf)->wait_event.events,
- &(cs_si(s->csf)->wait_event));
+ if (s->csf->wait_event.events)
+ conn->mux->unsubscribe(cs, s->csf->wait_event.events, &(s->csf->wait_event));
if (conn->mux->flags & MX_FL_NO_UPG)
return 0;
@@ -3278,22 +3277,22 @@
strm->txn->req.flags, strm->txn->rsp.flags);
chunk_appendf(&trash,
- " si[0]=%p (flags=0x%02x endp0=%s:%p sub=%d)\n",
+ " si[0]=%p (flags=0x%02x endp0=%s:%p)\n",
strm->csf->si,
strm->csf->si->flags,
(strm->csf->endp->flags & CS_EP_T_MUX ? "CONN" : "APPCTX"),
- __cs_endp_target(strm->csf), strm->csf->si->wait_event.events);
+ __cs_endp_target(strm->csf));
chunk_appendf(&trash,
- " si[1]=%p (flags=0x%02x endp1=%s:%p sub=%d)\n",
+ " si[1]=%p (flags=0x%02x endp1=%s:%p)\n",
strm->csb->si,
strm->csb->si->flags,
(strm->csb->endp->flags & CS_EP_T_MUX ? "CONN" : "APPCTX"),
- __cs_endp_target(strm->csb), strm->csb->si->wait_event.events);
+ __cs_endp_target(strm->csb));
csf = strm->csf;
- chunk_appendf(&trash, " cs=%p csf=0x%08x state=%s endp=%p,0x%08x\n", csf, csf->flags,
- cs_state_str(csf->state), csf->endp->target, csf->endp->flags);
+ chunk_appendf(&trash, " cs=%p csf=0x%08x state=%s endp=%p,0x%08x sub=%d\n", csf, csf->flags,
+ cs_state_str(csf->state), csf->endp->target, csf->endp->flags, csf->wait_event.events);
if ((conn = cs_conn(csf)) != NULL) {
chunk_appendf(&trash,
@@ -3329,8 +3328,8 @@
}
csb = strm->csb;
- chunk_appendf(&trash, " cs=%p csb=0x%08x state=%s endp=%p,0x%08x\n", csb, csb->flags,
- cs_state_str(csb->state), csb->endp->target, csb->endp->flags);
+ chunk_appendf(&trash, " cs=%p csb=0x%08x state=%s endp=%p,0x%08x sub=%d\n", csb, csb->flags,
+ cs_state_str(csb->state), csb->endp->target, csb->endp->flags, csb->wait_event.events);
if ((conn = cs_conn(csb)) != NULL) {
chunk_appendf(&trash,
" co1=%p ctrl=%s xprt=%s mux=%s data=%s target=%s:%p\n",