Thanks to the previous patch ("MEDIUM: applet: Add notion of shutdown for
write for applets"), it is no longer necessary to check SC flags to detect
shutdowns to interrupt the wait command. It is possible to remove this ugly
workaround. In addition, we only test the SE for shutdown because end of
stream and error are already checked by the CLI I/O handler. And it is no
longer necessary to remove output data from the channel's buffer because
shutdown are not reported if there are remaining outgoing data.
Of course, if the "wait" command is backported, the commit above and this
one must be backported too.
static int cli_io_handler_wait(struct appctx *appctx)
{
struct cli_wait_ctx *ctx = appctx->svcctx;
- struct stconn *sc = appctx_sc(appctx);
uint total, elapsed, left, wait;
int ret;
wait:
/* Stop waiting upon close/abort/error */
- if (unlikely((sc->flags & SC_FL_SHUT_DONE) ||
- se_fl_test(appctx->sedesc, (SE_FL_EOS|SE_FL_ERROR|SE_FL_SHR|SE_FL_SHW)))) {
- co_skip(sc_oc(sc), sc_oc(sc)->output);
+ if (unlikely(se_fl_test(appctx->sedesc, SE_FL_SHW))) {
ctx->error = CLI_WAIT_ERR_INTR;
return 1;
}
+
return 0;
}