]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - ao_write.c
task_register() conversion: stdin task
[paraslash.git] / ao_write.c
index af6882420f02377e9a48c695b72af6fdb20b43e8..63d18afab387288831e45e50cd33ecfd42801805 100644 (file)
@@ -40,14 +40,10 @@ static void aow_close(struct writer_node *wn)
 
        if (!pawd)
                return;
-       if (pawd->thread_btrn) {
-               pthread_cancel(pawd->thread);
-               pthread_join(pawd->thread, NULL);
-       }
+       assert(!pawd->thread_btrn);
        ao_close(pawd->dev);
        free(pawd);
        wn->private_data = NULL;
-       ao_shutdown();
 }
 
 static void aow_pre_select(struct sched *s, struct task *t)
@@ -161,7 +157,6 @@ static int aow_init(struct writer_node *wn, unsigned sample_rate,
        struct private_aow_data *pawd = para_malloc(sizeof(*pawd));
        struct ao_write_args_info *conf = wn->conf;
 
-       ao_initialize();
        if (conf->driver_given) {
                ret = -E_AO_BAD_DRIVER;
                id = ao_driver_id(conf->driver_arg);
@@ -352,8 +347,10 @@ static int aow_post_select(__a_unused struct sched *s,
                return 0;
        }
        if (!wn->btrn) {
-               if (!pawd->thread_btrn)
+               if (!pawd->thread_btrn) {
+                       pthread_join(pawd->thread, NULL);
                        return -E_AO_EOF;
+               }
                PARA_INFO_LOG("waiting for play thread to terminate\n");
                return 0;
        }
@@ -456,6 +453,5 @@ void ao_write_init(struct writer *w)
        dh[num_lines] = NULL;
        w->help.detailed_help = (const char **)dh;
        ao_write_cmdline_parser_free(&dummy);
-       ao_shutdown();
 }