]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - client.c
client: Only start stdin task for addblob commands.
[paraslash.git] / client.c
index 413d08ccbf9269a62a033886ce8254a74b7e5145..44862ab987015948ef3e9f3c2d6b9fdd4e12e008 100644 (file)
--- a/client.c
+++ b/client.c
@@ -531,25 +531,39 @@ __noreturn static void print_completions(void)
 
 #endif /* HAVE_READLINE */
 
+struct supervisor_task {
+       bool stdout_task_started;
+       struct task task;
+};
+
 static void supervisor_post_select(struct sched *s, struct task *t)
 {
+       struct supervisor_task *svt = container_of(t, struct supervisor_task,
+               task);
+
        if (ct->task.error < 0) {
                t->error = ct->task.error;
                return;
        }
-       if (ct->status == CL_EXECUTING) {
-               stdin_set_defaults(&sit);
-               register_task(s, &sit.task);
+       if (!svt->stdout_task_started && ct->status == CL_EXECUTING) {
                stdout_set_defaults(&sot);
                register_task(s, &sot.task);
+               svt->stdout_task_started = true;
+               return;
+       }
+       if (ct->status == CL_SENDING) {
+               stdin_set_defaults(&sit);
+               register_task(s, &sit.task);
                t->error = -E_TASK_STARTED;
                return;
        }
 }
 
-static struct task svt = {
-       .post_select = supervisor_post_select,
-       .status = "supervisor task"
+static struct supervisor_task supervisor_task = {
+       .task = {
+               .post_select = supervisor_post_select,
+               .status = "supervisor task"
+       }
 };
 
 /**
@@ -598,7 +612,7 @@ 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, &svt);
+       register_task(&sched, &supervisor_task.task);
        ret = schedule(&sched);
        if (ret >= 0 && ct->task.error < 0) {
                switch(ct->task.error) {