_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 <t> is NULL.
+ */
static inline void task_destroy(struct task *t)
{
if (!t)
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);
}
/* 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) {
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);
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);
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);
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;