From: Willy Tarreau Date: Tue, 7 May 2019 17:05:35 +0000 (+0200) Subject: CLEANUP: task: remove unneeded tests before task_destroy() X-Git-Tag: v2.0-dev3~82 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f656279347ec0901e06329c14729d264ddf6ea39;p=thirdparty%2Fhaproxy.git CLEANUP: task: remove unneeded tests before task_destroy() Since previous commit it's not needed anymore to test a task pointer before calling task_destory() so let's just remove these tests from the various callers before they become confusing. The function's arguments were also documented. The same should probably be done with tasklet_free() which involves a test in roughly half of the call places. --- diff --git a/include/proto/task.h b/include/proto/task.h index f167933231..df9bc2ad2e 100644 --- a/include/proto/task.h +++ b/include/proto/task.h @@ -329,6 +329,10 @@ static inline void __task_free(struct task *t) _HA_ATOMIC_SUB(&nb_tasks, 1); } +/* Destroys a task : it's unlinked from the wait queues and is freed if it's + * the current task or not queued otherwise it's marked to be freed by the + * scheduler. It does nothing if is NULL. + */ static inline void task_destroy(struct task *t) { if (!t) diff --git a/src/checks.c b/src/checks.c index e6b0bd1d06..63d9e03401 100644 --- a/src/checks.c +++ b/src/checks.c @@ -3303,10 +3303,7 @@ int init_email_alert(struct mailers *mls, struct proxy *p, char **err) struct email_alertq *q = &queues[i]; struct check *check = &q->check; - if (check->task) { - task_destroy(check->task); - check->task = NULL; - } + task_destroy(check->task); free_check(check); } free(queues); diff --git a/src/flt_spoe.c b/src/flt_spoe.c index 2d70aff5be..75854b7ae3 100644 --- a/src/flt_spoe.c +++ b/src/flt_spoe.c @@ -1275,9 +1275,7 @@ spoe_release_appctx(struct appctx *appctx) } /* Destroy the task attached to this applet */ - if (spoe_appctx->task) { - task_destroy(spoe_appctx->task); - } + task_destroy(spoe_appctx->task); /* Notify all waiting streams */ list_for_each_entry_safe(ctx, back, &spoe_appctx->waiting_queue, list) { diff --git a/src/haproxy.c b/src/haproxy.c index f709224c58..8ab0c2e6f4 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -2290,18 +2290,15 @@ void deinit(void) while (s) { s_next = s->next; - if (s->check.task) - task_destroy(s->check.task); - if (s->agent.task) - task_destroy(s->agent.task); + task_destroy(s->check.task); + task_destroy(s->agent.task); if (s->check.wait_list.task) tasklet_free(s->check.wait_list.task); if (s->agent.wait_list.task) tasklet_free(s->agent.wait_list.task); - if (s->warmup) - task_destroy(s->warmup); + task_destroy(s->warmup); free(s->id); free(s->cookie); diff --git a/src/mux_h1.c b/src/mux_h1.c index 46bc33c908..69a6e25197 100644 --- a/src/mux_h1.c +++ b/src/mux_h1.c @@ -431,8 +431,7 @@ static int h1_init(struct connection *conn, struct proxy *proxy, struct session return 0; fail: - if (t) - task_destroy(t); + task_destroy(t); if (h1c->wait_event.task) tasklet_free(h1c->wait_event.task); pool_free(pool_head_h1c, h1c); diff --git a/src/mux_h2.c b/src/mux_h2.c index 6fb21dd2fd..eca85cbe21 100644 --- a/src/mux_h2.c +++ b/src/mux_h2.c @@ -575,8 +575,7 @@ static int h2_init(struct connection *conn, struct proxy *prx, struct session *s fail_stream: hpack_dht_free(h2c->ddht); fail: - if (t) - task_destroy(t); + task_destroy(t); if (h2c->wait_event.task) tasklet_free(h2c->wait_event.task); pool_free(pool_head_h2c, h2c); diff --git a/src/session.c b/src/session.c index 875fae89b7..c77f1e9596 100644 --- a/src/session.c +++ b/src/session.c @@ -448,11 +448,8 @@ static int conn_complete_session(struct connection *conn) goto fail; /* the embryonic session's task is not needed anymore */ - if (sess->task) { - task_destroy(sess->task); - sess->task = NULL; - } - + task_destroy(sess->task); + sess->task = NULL; conn_set_owner(conn, sess, conn_session_free); return 0;