]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - client.c
sched: Dont use fixed-size buffer for task names.
[paraslash.git] / client.c
index d951692caa22f11340dcae3e29962aec2e5aa0ec..5573d037794d8b34049200b9bb32322074a39cbb 100644 (file)
--- a/client.c
+++ b/client.c
@@ -530,16 +530,16 @@ __noreturn static void print_completions(void)
 
 struct supervisor_task {
        bool stdout_task_started;
-       struct task task;
+       struct task *task;
 };
 
 static int supervisor_post_select(struct sched *s, struct task *t)
 {
-       struct supervisor_task *svt = container_of(t, struct supervisor_task,
-               task);
+       struct supervisor_task *svt = task_context(t);
+       int ret = task_status(ct->task);
 
-       if (ct->task.error < 0)
-               return ct->task.error;
+       if (ret < 0)
+               return ret;
        if (!svt->stdout_task_started && ct->status == CL_EXECUTING) {
                stdout_task_register(&sot, s);
                svt->stdout_task_started = true;
@@ -552,12 +552,7 @@ static int supervisor_post_select(struct sched *s, struct task *t)
        return 0;
 }
 
-static struct supervisor_task supervisor_task = {
-       .task = {
-               .post_select = supervisor_post_select,
-               .status = "supervisor task"
-       }
-};
+static struct supervisor_task supervisor_task;
 
 /**
  * The client program to connect to para_server.
@@ -605,18 +600,26 @@ int main(int argc, char *argv[])
                goto out;
        sot.btrn = btr_new_node(&(struct btr_node_description)
                EMBRACE(.name = "stdout", .parent = ct->btrn[0]));
-       register_task(&sched, &supervisor_task.task);
+       supervisor_task.task = task_register(&(struct task_info) {
+               .name = "supervisor",
+               .post_select = supervisor_post_select,
+               .context = &supervisor_task,
+       }, &sched);
+
        ret = schedule(&sched);
-       if (ret >= 0 && ct->task.error < 0) {
-               switch(ct->task.error) {
-               /* these are not errors */
-               case -E_SERVER_CMD_SUCCESS:
-               case -E_EOF:
-               case -E_SERVER_EOF:
-               case -E_BTR_EOF:
-                       ret = 0;
-                       break;
-               default: ret = -E_SERVER_CMD_FAILURE;
+       if (ret >= 0) {
+               ret = task_status(ct->task);
+               if (ret < 0) {
+                       switch (ret) {
+                       /* these are not errors */
+                       case -E_SERVER_CMD_SUCCESS:
+                       case -E_EOF:
+                       case -E_SERVER_EOF:
+                       case -E_BTR_EOF:
+                               ret = 0;
+                               break;
+                       default: ret = -E_SERVER_CMD_FAILURE;
+                       }
                }
        }
        sched_shutdown(&sched);