X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=oss_write.c;h=6525afa48fca41a9f42d01f36d36315f054c3cf5;hp=8426753e1355dcf7424f140e281683ea580eb693;hb=6b935f552ebfe3a0a83ec9367deb2f42c1aff252;hpb=f42b5eccb6ec3364dc0500ffeffbe9d9ecab07bd diff --git a/oss_write.c b/oss_write.c index 8426753e..6525afa4 100644 --- a/oss_write.c +++ b/oss_write.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 Andre Noll + * Copyright (C) 2009-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -53,7 +53,8 @@ static void oss_close(struct writer_node *wn) { struct private_oss_write_data *powd = wn->private_data; - close(powd->fd); + if (powd->fd >= 0) + close(powd->fd); free(powd); } @@ -137,7 +138,7 @@ static int oss_init(struct writer_node *wn, unsigned samplerate, unsigned channe return 1; err: close(powd->fd); - free(powd); + powd->fd = -1; return ret; } @@ -173,6 +174,7 @@ static void oss_post_select(__a_unused struct sched *s, goto out; return; } + btr_merge(btrn, wn->min_iqs); bytes = btr_next_buffer(btrn, &data); frames = bytes / powd->bytes_per_frame; if (!frames) { /* eof and less than a single frame available */ @@ -182,7 +184,7 @@ static void oss_post_select(__a_unused struct sched *s, ret = 0; if (!FD_ISSET(powd->fd, &s->wfds)) goto out; - ret = write_nonblock(powd->fd, data, frames * powd->bytes_per_frame, 0); + ret = write_nonblock(powd->fd, data, frames * powd->bytes_per_frame); if (ret < 0) goto out; btr_consume(btrn, ret);