diff --git a/src/applet.c b/src/applet.c index b7e9920b8..63ee15588 100644 --- a/src/applet.c +++ b/src/applet.c @@ -48,19 +48,19 @@ struct appctx *appctx_new_on(struct applet *applet, struct sedesc *sedesc, int t appctx->obj_type = OBJ_TYPE_APPCTX; appctx->applet = applet; appctx->sess = NULL; - appctx->sedesc = NULL; - if (!sedesc) { - sedesc = sedesc_new(); - if (!sedesc) - goto fail_endp; - sedesc->se = appctx; - se_fl_set(sedesc, SE_FL_T_APPLET | SE_FL_ORPHAN); - } appctx->t = task_new_on(thr); if (unlikely(!appctx->t)) goto fail_task; + if (!sedesc) { + sedesc = sedesc_new(); + if (unlikely(!sedesc)) + goto fail_endp; + sedesc->se = appctx; + se_fl_set(sedesc, SE_FL_T_APPLET | SE_FL_ORPHAN); + } + appctx->sedesc = sedesc; appctx->t->process = task_run_applet; appctx->t->context = appctx; @@ -72,9 +72,9 @@ struct appctx *appctx_new_on(struct applet *applet, struct sedesc *sedesc, int t _HA_ATOMIC_INC(&nb_applets); return appctx; - fail_task: - sedesc_free(appctx->sedesc); fail_endp: + task_destroy(appctx->t); + fail_task: pool_free(pool_head_appctx, appctx); fail_appctx: return NULL;