When the SPOE applet was released, if a SPOE filter context was still
attached to it, an error was reported to the filter. However, there is no
reason to report an error if the ACK message was already received. Because
of this bug, if the ACK message is received and the SPOE connection is
immediately closed, this prevents the ACK message to be processed.
This patch should be backported to 3.1.
if (spoe_appctx->spoe_ctx) {
/* Report an error to stream */
spoe_appctx->spoe_ctx->spoe_appctx = NULL;
- spoe_appctx->spoe_ctx->state = SPOE_CTX_ST_ERROR;
- spoe_appctx->spoe_ctx->status_code = (spoe_appctx->status_code + 0x100);
+ if (spoe_appctx->spoe_ctx->state != SPOE_CTX_ST_DONE) {
+ spoe_appctx->spoe_ctx->state = SPOE_CTX_ST_ERROR;
+ spoe_appctx->spoe_ctx->status_code = (spoe_appctx->status_code + 0x100);
+ }
task_wakeup(spoe_appctx->spoe_ctx->strm->task, TASK_WOKEN_MSG);
}