diff --git a/src/applet.c b/src/applet.c index 7298860e5..f4c5c862e 100644 --- a/src/applet.c +++ b/src/applet.c @@ -467,8 +467,11 @@ struct task *task_run_applet(struct task *t, void *context, unsigned int state) if (channel_is_empty(sc_oc(sc))) sc_ep_report_send_activity(sc); - else + else { sc_ep_report_blocked_send(sc); + __sc_strm(sc)->task->expire = tick_first(__sc_strm(sc)->task->expire, sc_ep_snd_ex(sc)); + task_queue(__sc_strm(sc)->task); + } /* measure the call rate and check for anomalies when too high */ if (((b_size(sc_ib(sc)) && sc->flags & SC_FL_NEED_BUFF) || // asks for a buffer which is present diff --git a/src/stconn.c b/src/stconn.c index 8bffba73d..e4d876cc5 100644 --- a/src/stconn.c +++ b/src/stconn.c @@ -1133,7 +1133,6 @@ static void sc_notify(struct stconn *sc) (channel_is_empty(oc) && !oc->to_forward)))))) { task_wakeup(task, TASK_WOKEN_IO); } - if (ic->flags & CF_READ_EVENT) sc->flags &= ~SC_FL_RCV_ONCE; } @@ -1694,6 +1693,8 @@ static int sc_conn_send(struct stconn *sc) /* We couldn't send all of our data, let the mux know we'd like to send more */ conn->mux->subscribe(sc, SUB_RETRY_SEND, &sc->wait_event); sc_ep_report_blocked_send(sc); + s->task->expire = tick_first(s->task->expire, sc_ep_snd_ex(sc)); + task_queue(s->task); } return did_send;