]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - audiod.c
sched: Do not shadow task_info in struct task.
[paraslash.git] / audiod.c
index aa757416032b3e5a0f2cd726f940aa47dd7f0212..ee1364433e77de965e715fe59692040e6e590989 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -100,7 +100,7 @@ struct sched sched = {.max_fileno = 0};
  */
 struct status_task {
        /** The associated task structure of audiod. */
-       struct task task;
+       struct task *task;
        /** Client data associated with the stat task. */
        struct client_task *ct;
        /** Do not restart client command until this time. */
@@ -593,7 +593,7 @@ static bool receiver_running(void)
 
                if (!s->receiver_node)
                        continue;
-               if (s->receiver_node->task->error >= 0)
+               if (task_status(s->receiver_node->task) >= 0)
                        return true;
                if (ss1 == ss2)
                        return true;
@@ -620,7 +620,7 @@ struct btr_node *audiod_get_btr_root(void)
                struct timeval rstime;
                if (!s->receiver_node)
                        continue;
-               if (s->receiver_node->task->error < 0)
+               if (task_status(s->receiver_node->task) < 0)
                        continue;
                btr_get_node_start(s->receiver_node->btrn, &rstime);
                if (newest_slot >= 0 && tv_diff(&rstime, &newest_rstime, NULL) < 0)
@@ -1109,17 +1109,17 @@ static bool must_close_slot(int slot_num)
 
        if (s->format < 0)
                return false;
-       if (s->receiver_node && s->receiver_node->task->error >= 0)
+       if (s->receiver_node && task_status(s->receiver_node->task) >= 0)
                return false;
        for (i = 0; i < a->num_filters; i++)
-               if (s->fns && s->fns[i].task->error >= 0)
+               if (s->fns && task_status(s->fns[i].task) >= 0)
                        return false;
        if (a->num_writers > 0) {
                for (i = 0; i < a->num_writers; i++)
-                       if (s->wns && s->wns[i].task->error >= 0)
+                       if (s->wns && task_status(s->wns[i].task) >= 0)
                                return false;
        } else {
-               if (s->wns && s->wns[0].task->error >= 0)
+               if (s->wns && task_status(s->wns[0].task) >= 0)
                        return false;
        }
        return true;
@@ -1198,7 +1198,7 @@ static void start_stop_decoders(void)
 
 static void status_pre_select(struct sched *s, struct task *t)
 {
-       struct status_task *st = container_of(t, struct status_task, task);
+       struct status_task *st = task_context(t);
        int i, ret, cafn = stat_task->current_audio_format_num;
 
        if (must_start_decoder())
@@ -1230,12 +1230,12 @@ min_delay:
 /* restart the client task if necessary */
 static int status_post_select(struct sched *s, struct task *t)
 {
-       struct status_task *st = container_of(t, struct status_task, task);
+       struct status_task *st = task_context(t);
 
        if (audiod_status == AUDIOD_OFF) {
                if (!st->ct)
                        goto out;
-               if (st->ct->task->error >= 0) {
+               if (task_status(st->ct->task) >= 0) {
                        task_notify(st->ct->task, E_AUDIOD_OFF);
                        goto out;
                }
@@ -1308,14 +1308,18 @@ out:
 static void init_status_task(struct status_task *st)
 {
        memset(st, 0, sizeof(struct status_task));
-       st->task.pre_select = status_pre_select;
-       st->task.post_select = status_post_select;
        st->sa_time_diff_sign = 1;
        st->clock_diff_count = conf.clock_diff_count_arg;
        st->current_audio_format_num = -1;
-       sprintf(st->task.status, "stat");
        st->btrn = btr_new_node(&(struct btr_node_description)
                EMBRACE(.name = "stat"));
+
+       stat_task->task = task_register(&(struct task_info) {
+               .name = "stat",
+               .pre_select = status_pre_select,
+               .post_select = status_post_select,
+               .context = stat_task,
+       }, &sched);
 }
 
 static void set_initial_status(void)
@@ -1433,7 +1437,6 @@ int main(int argc, char *argv[])
                .context = sig_task,
        }, &sched);
 
-       register_task(&sched, &stat_task->task);
        sched.default_timeout.tv_sec = 2;
        sched.default_timeout.tv_usec = 999 * 1000;
        ret = schedule(&sched);