X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=audiod.c;h=9f2aa5ab6960f08c9affdd919ae04b26f73b039c;hp=93bc8da37c6e8cf16f550b9e88b8c6f2c0c5ef95;hb=d1fc17a64ea26ddcf34d044e6d51c884b368c66c;hpb=c4bfb18b78b3935b8dbf68f70b219cfb2a192979 diff --git a/audiod.c b/audiod.c index 93bc8da3..9f2aa5ab 100644 --- a/audiod.c +++ b/audiod.c @@ -381,7 +381,7 @@ static void close_receiver(int slot_num) PARA_NOTICE_LOG("closing %s receiver in slot %d\n", audio_formats[s->format], slot_num); a->receiver->close(s->receiver_node); - btr_free_node(s->receiver_node->btrn); + btr_remove_node(&s->receiver_node->btrn); free(s->receiver_node); s->receiver_node = NULL; tv_add(now, &(struct timeval)EMBRACE(0, 200 * 1000), @@ -397,7 +397,7 @@ static void writer_cleanup(struct writer_node *wn) w = writers + wn->writer_num; PARA_INFO_LOG("closing %s\n", writer_names[wn->writer_num]); w->close(wn); - btr_free_node(wn->btrn); + btr_remove_node(&wn->btrn); } static void close_writers(struct slot_info *s) @@ -434,7 +434,7 @@ static void close_filters(struct slot_info *s) f = filters + fn->filter_num; if (f->close) f->close(fn); - btr_free_node(fn->btrn); + btr_remove_node(&fn->btrn); } free(s->fns); s->fns = NULL; @@ -446,12 +446,12 @@ static void close_filters(struct slot_info *s) * task. Note that the scheduler checks t->error also _before_ each pre/post * select call, so the victim will never be scheduled again. */ -static void kill_btrn(struct btr_node *btrn, struct task *t, int error) +static void kill_btrn(struct btr_node **btrnp, struct task *t, int error) { if (t->error < 0) return; t->error = error; - btr_remove_node(btrn); + btr_remove_node(btrnp); } static void kill_all_decoders(int error) @@ -464,7 +464,7 @@ static void kill_all_decoders(int error) continue; if (!s->receiver_node) continue; - kill_btrn(s->receiver_node->btrn, &s->receiver_node->task, + kill_btrn(&s->receiver_node->btrn, &s->receiver_node->task, error); } } @@ -563,7 +563,7 @@ static int open_receiver(int format) EMBRACE(.name = r->name, .context = rn)); ret = r->open(rn); if (ret < 0) { - btr_free_node(rn->btrn); + btr_remove_node(&rn->btrn); free(rn); return ret; } @@ -1196,7 +1196,7 @@ static void status_post_select(struct sched *s, struct task *t) if (!st->ct) goto out; if (st->ct->task.error >= 0) { - kill_btrn(st->ct->btrn, &st->ct->task, -E_AUDIOD_OFF); + kill_btrn(&st->ct->btrn, &st->ct->task, -E_AUDIOD_OFF); goto out; } close_stat_pipe(); @@ -1218,7 +1218,7 @@ static void status_post_select(struct sched *s, struct task *t) struct timeval diff; tv_diff(now, &st->last_status_read, &diff); if (diff.tv_sec > 61) - kill_btrn(st->ct->btrn, &st->ct->task, + kill_btrn(&st->ct->btrn, &st->ct->task, -E_STATUS_TIMEOUT); goto out; } @@ -1226,7 +1226,7 @@ static void status_post_select(struct sched *s, struct task *t) sz = btr_next_buffer(st->btrn, &buf); ret = for_each_stat_item(buf, sz, update_item); if (ret < 0) { - kill_btrn(st->ct->btrn, &st->ct->task, ret); + kill_btrn(&st->ct->btrn, &st->ct->task, ret); goto out; } if (sz != ret) {