From da34ec740dd1b4db9145d72f9ec1357919a9c633 Mon Sep 17 00:00:00 2001 From: Andre Date: Tue, 30 May 2006 03:23:11 +0200 Subject: [PATCH] fix audiod on/off/sb commands Unregister all running tasks in all running slots. That's much cleaner than using the dirty hack with rn->eof we had before. --- audiod.c | 20 +++++++++++++++----- write_common.c | 1 + 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/audiod.c b/audiod.c index 0c8ee287..8f6f3560 100644 --- a/audiod.c +++ b/audiod.c @@ -499,8 +499,22 @@ static void kill_all_decoders(void) FOR_EACH_SLOT(i) { struct slot_info *s = &slot[i]; - if (s->receiver_node) + if (s->wng && !s->wng->eof) { + PARA_INFO_LOG("unregistering writer node group in slot %d\n", + i); + wng_unregister(s->wng); + s->wng->eof = 1; + } + if (s->fc && !s->fc->eof) { + PARA_INFO_LOG("unregistering filter chain in slot %d\n", i); + unregister_task(&s->fc->task); + s->fc->eof = 1; + } + if (s->receiver_node && !s->receiver_node->eof) { + PARA_INFO_LOG("unregistering receiver_node in slot %d\n", i); + unregister_task(&s->receiver_node->task); s->receiver_node->eof = 1; + } } } @@ -670,10 +684,6 @@ static void wng_event_handler(struct task *t) struct slot_info *s = &slot[i]; if (s->wng != wng) continue; -// if (s->fc) -// s->fc->eof = 1; -// if (s->receiver_node) -// s->receiver_node->eof = 1; PARA_INFO_LOG("slot %d: %s\n", i, PARA_STRERROR(-t->ret)); } } diff --git a/write_common.c b/write_common.c index 50784cec..dda60168 100644 --- a/write_common.c +++ b/write_common.c @@ -90,6 +90,7 @@ void wng_unregister(struct writer_node_group *g) unregister_task(&wn->task); } unregister_task(&g->task); + g->eof = 1; } void wng_close(struct writer_node_group *g) -- 2.39.2