From 3b3049ea42b0c754a0e1343a74591ce020cf1488 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 31 Mar 2013 22:40:48 +0000 Subject: [PATCH] alsa: Switch to the alternative post select method. --- alsa_write.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/alsa_write.c b/alsa_write.c index 43f0811a..c99f26e4 100644 --- a/alsa_write.c +++ b/alsa_write.c @@ -235,7 +235,7 @@ static void alsa_close(struct writer_node *wn) free(pad); } -static void alsa_write_post_select(__a_unused struct sched *s, +static int alsa_write_post_select(__a_unused struct sched *s, struct task *t) { struct writer_node *wn = container_of(t, struct writer_node, task); @@ -252,7 +252,7 @@ static void alsa_write_post_select(__a_unused struct sched *s, again: ret = btr_node_status(btrn, wn->min_iqs, BTR_NT_LEAF); if (ret == 0) - return; + return 0; btr_merge(btrn, wn->min_iqs); bytes = btr_next_buffer(btrn, &data); if (ret < 0 || bytes < wn->min_iqs) { /* eof */ @@ -265,17 +265,17 @@ again: PARA_DEBUG_LOG("waiting for device to drain\n"); tv_add(now, &(struct timeval)EMBRACE(0, 200 * 1000), &pad->drain_barrier); - return; + return 0; } if (tv_diff(now, &pad->drain_barrier, NULL) > 0) goto err; - return; + return 0; } if (!pad) { int32_t val; if (bytes == 0) /* no data available */ - return; + return 0; pad = para_calloc(sizeof(*pad)); get_btr_sample_rate(btrn, &val); pad->sample_rate = val; @@ -296,7 +296,7 @@ again: goto again; } if (pad->poll_fd < 0 || !FD_ISSET(pad->poll_fd, &s->rfds)) - return; + return 0; frames = bytes / pad->bytes_per_frame; frames = snd_pcm_writei(pad->handle, data, frames); if (frames == 0 || frames == -EAGAIN) { @@ -310,7 +310,7 @@ again: char buf[100]; if (read(pad->poll_fd, buf, 100)) do_nothing; - return; + return 0; } if (frames > 0) { btr_consume(btrn, frames * pad->bytes_per_frame); @@ -319,14 +319,14 @@ again: if (frames == -EPIPE) { PARA_WARNING_LOG("underrun (tried to write %zu bytes)\n", bytes); snd_pcm_prepare(pad->handle); - return; + return 0; } PARA_ERROR_LOG("alsa write error: %s\n", snd_strerror(-frames)); ret = -E_ALSA; err: assert(ret < 0); btr_remove_node(&wn->btrn); - t->error = ret; + return ret; } __malloc static void *alsa_parse_config_or_die(int argc, char **argv) @@ -357,7 +357,8 @@ void alsa_write_init(struct writer *w) alsa_write_cmdline_parser_init(&dummy); w->close = alsa_close; w->pre_select = alsa_write_pre_select; - w->post_select = alsa_write_post_select; + w->new_post_select = alsa_write_post_select; + w->post_select = NULL; w->parse_config_or_die = alsa_parse_config_or_die; w->free_config = alsa_free_config; w->help = (struct ggo_help) { -- 2.30.2