task_register() conversion: stdin task
authorAndre Noll <maan@systemlinux.org>
Wed, 8 Jan 2014 05:16:15 +0000 (05:16 +0000)
committerAndre Noll <maan@systemlinux.org>
Sun, 25 May 2014 13:36:37 +0000 (15:36 +0200)
This renames stdin_set_defaults() to stdin_task_register() and changes
the function to register the stdin task. Before this patch, the task
was registered in the callers.

client.c
filter.c
stdin.c
stdin.h
write.c

index 338f05c..56e7cc5 100644 (file)
--- a/client.c
+++ b/client.c
@@ -544,8 +544,7 @@ static int supervisor_post_select(struct sched *s, struct task *t)
                return 1;
        }
        if (ct->status == CL_SENDING) {
-               stdin_set_defaults(&sit);
-               register_task(s, &sit.task);
+               stdin_task_register(&sit, s);
                return -E_TASK_STARTED;
        }
        return 0;
index 69b12d7..7e3575f 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -112,8 +112,7 @@ int main(int argc, char *argv[])
                goto out;
        sit->btrn = btr_new_node(&(struct btr_node_description)
                EMBRACE(.name = "stdin"));
-       stdin_set_defaults(sit);
-       register_task(&s, &sit->task);
+       stdin_task_register(sit, &s);
 
        fns = para_malloc(conf.filter_given * sizeof(*fns));
        for (i = 0, parent = sit->btrn; i < conf.filter_given; i++) {
diff --git a/stdin.c b/stdin.c
index d5425b2..ed66316 100644 (file)
--- a/stdin.c
+++ b/stdin.c
@@ -30,7 +30,7 @@
  */
 static void stdin_pre_select(struct sched *s, struct task *t)
 {
-       struct stdin_task *sit = container_of(t, struct stdin_task, task);
+       struct stdin_task *sit = task_context(t);
        int ret;
 
        ret = btr_node_status(sit->btrn, 0, BTR_NT_ROOT);
@@ -56,7 +56,7 @@ static void stdin_pre_select(struct sched *s, struct task *t)
  */
 static int stdin_post_select(struct sched *s, struct task *t)
 {
-       struct stdin_task *sit = container_of(t, struct stdin_task, task);
+       struct stdin_task *sit = task_context(t);
        ssize_t ret;
        size_t sz, n;
        char *buf = NULL;
@@ -95,21 +95,25 @@ err:
 }
 
 /**
- * Initialize a stdin task structure with default values.
+ * Register a stdin task structure.
  *
- * \param sit The stdin task structure.
+ * \param sit The stdin task structure to register.
+ * \param s The task will be added to this scheduler's task list.
  *
- * This fills in the pre/post select function pointers of the task structure
- * given by \a sit and creates a buffer tree for I/O.
+ * This allocates a buffer tree pool for I/O, sets up \a sit and registers a
+ * task with \a sit as context pointer.
  */
-void stdin_set_defaults(struct stdin_task *sit)
+void stdin_task_register(struct stdin_task *sit, struct sched *s)
 {
        int ret;
+       struct task_info ti = {
+               .name = "stdin",
+               .pre_select = stdin_pre_select,
+               .post_select = stdin_post_select,
+               .context = sit,
+       };
 
-       sit->task.pre_select = stdin_pre_select;
-       sit->task.post_select = stdin_post_select;
        sit->btrp = btr_pool_new("stdin", 128 * 1024);
-       sprintf(sit->task.status, "stdin reader");
        /*
         * Both STDIN_FILENO and STDOUT_FILENO may refer to the same open file
         * description (the terminal), and thus share the same file status
@@ -124,4 +128,5 @@ void stdin_set_defaults(struct stdin_task *sit)
        }
        sit->fd_flags = ret;
        sit->must_set_nonblock_flag = (sit->fd_flags & O_NONBLOCK) == 0;
+       sit->task = task_register(&ti, s);
 }
diff --git a/stdin.h b/stdin.h
index 22ea7ed..b40cf7e 100644 (file)
--- a/stdin.h
+++ b/stdin.h
@@ -9,7 +9,7 @@
 /** The task structure used for reading from stdin. */
 struct stdin_task {
        /** The task structure. */
-       struct task task;
+       struct task *task;
        /** Stdin is always the root of a buffer tree. */
        struct btr_node *btrn;
        /** Use a buffer pool to minimize memcpy due to alignment problems. */
@@ -20,4 +20,4 @@ struct stdin_task {
        bool must_set_nonblock_flag;
 };
 
-void stdin_set_defaults(struct stdin_task *sit);
+void stdin_task_register(struct stdin_task *sit, struct sched *s);
diff --git a/write.c b/write.c
index 4ed5f72..aa230f5 100644 (file)
--- a/write.c
+++ b/write.c
@@ -104,8 +104,7 @@ static int setup_and_schedule(void)
 
        sit.btrn = btr_new_node(&(struct btr_node_description)
                EMBRACE(.name = "stdin"));
-       stdin_set_defaults(&sit);
-       register_task(&s, &sit.task);
+       stdin_task_register(&sit, &s);
 
        COPY_WAV_PARMS(&wp, &conf);
        wt.cwc = check_wav_init(sit.btrn, NULL, &wp, &cw_btrn);
@@ -149,6 +148,7 @@ static int setup_and_schedule(void)
        }
        free(wns);
        check_wav_shutdown(wt.cwc);
+       sched_shutdown(&s);
        return ret;
 }