X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=write.c;h=15bbb4a6399dd0739b41d3ee6c7b73e4c6af5fbc;hp=4ed5f72e10638eb03149d6a431511d8d7b59539e;hb=c5056b00502d27e602cfcd716f92e5f85f97b470;hpb=f76ab46a9216133332cb7e17d38d392caeca22cb diff --git a/write.c b/write.c index 4ed5f72e..15bbb4a6 100644 --- a/write.c +++ b/write.c @@ -71,19 +71,19 @@ static void setup_writer_node(const char *arg, struct btr_node *parent, } struct write_task { - struct task task; + struct task *task; struct check_wav_context *cwc; }; static void write_pre_select(struct sched *s, struct task *t) { - struct write_task *wt = container_of(t, struct write_task, task); + struct write_task *wt = task_context(t); check_wav_pre_select(s, wt->cwc); } static int write_post_select(__a_unused struct sched *s, struct task *t) { - struct write_task *wt = container_of(t, struct write_task, task); + struct write_task *wt = task_context(t); return check_wav_post_select(wt->cwc); } @@ -94,22 +94,20 @@ static int setup_and_schedule(void) struct writer_node *wns; static struct sched s; struct wav_params wp; - struct write_task wt = { - .task = { - .pre_select = write_pre_select, - .post_select = write_post_select, - .status = "write task", - }, - }; + struct write_task wt; 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); - register_task(&s, &wt.task); + wt.task = task_register(&(struct task_info) { + .name = "write", + .pre_select = write_pre_select, + .post_select = write_post_select, + .context = &wt, + }, &s); if (!conf.writer_given) { wns = para_calloc(sizeof(*wns)); setup_writer_node(NULL, cw_btrn, wns, &s); @@ -127,7 +125,7 @@ static int setup_and_schedule(void) if (ret >= 0) { int j; for (j = 0; j < i; j++) { - struct task *t = &wns[j].task; + struct task *t = wns[j].task; assert(t->error < 0); if (t->error != -E_WRITE_COMMON_EOF && t->error != -E_BTR_EOF) { @@ -149,6 +147,7 @@ static int setup_and_schedule(void) } free(wns); check_wav_shutdown(wt.cwc); + sched_shutdown(&s); return ret; }