/*
- * Copyright (C) 2011-2014 Andre Noll <maan@systemlinux.org>
+ * Copyright (C) 2011 Andre Noll <maan@tuebingen.mpg.de>
*
* Licensed under the GPL v2. For licencing details see COPYING.
*/
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)
+static void aow_pre_select(struct sched *s, void *context)
{
- struct writer_node *wn = container_of(t, struct writer_node, task);
+ struct writer_node *wn = context;
struct private_aow_data *pawd = wn->private_data;
int ret;
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);
return -E_AO_PTHREAD;
}
-static int aow_post_select(__a_unused struct sched *s,
- struct task *t)
+static int aow_post_select(__a_unused struct sched *s, void *context)
{
- struct writer_node *wn = container_of(t, struct writer_node, task);
+ struct writer_node *wn = context;
struct private_aow_data *pawd = wn->private_data;
int ret;
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;
}
dh[num_lines] = NULL;
w->help.detailed_help = (const char **)dh;
ao_write_cmdline_parser_free(&dummy);
- ao_shutdown();
}