From cba5c929ec285dd097674d2d85fc863fa8b18d2f Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 13 Feb 2001 11:23:26 +0000 Subject: [PATCH] Moved the detach code to the more appropriate place. --- src/mixer/mixer.c | 7 +++++++ src/mixer/simple.c | 6 ------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/mixer/mixer.c b/src/mixer/mixer.c index 8db19832..efce4307 100644 --- a/src/mixer/mixer.c +++ b/src/mixer/mixer.c @@ -284,6 +284,7 @@ int snd_mixer_elem_add(snd_mixer_elem_t *elem, snd_mixer_class_t *class) int snd_mixer_elem_remove(snd_mixer_elem_t *elem) { snd_mixer_t *mixer = elem->class->mixer; + bag_iterator_t i, n; int err, idx, dir; unsigned int m; assert(elem); @@ -291,6 +292,12 @@ int snd_mixer_elem_remove(snd_mixer_elem_t *elem) idx = _snd_mixer_find_elem(mixer, elem, &dir); if (dir != 0) return -EINVAL; + __again: + bag_for_each(i, n, &elem->helems) { + snd_hctl_elem_t *helem = bag_iterator_entry(i); + snd_mixer_elem_detach(elem, helem); + goto __again; /* FIXME: optimize */ + } err = snd_mixer_elem_throw_event(elem, SND_CTL_EVENT_REMOVE); list_del(&elem->list); if (elem->private_free) diff --git a/src/mixer/simple.c b/src/mixer/simple.c index e116b89e..9633d144 100644 --- a/src/mixer/simple.c +++ b/src/mixer/simple.c @@ -425,15 +425,9 @@ static int selem_write(snd_mixer_elem_t *elem, static void selem_free(snd_mixer_elem_t *elem) { - int k; - selem_t *s; assert(elem->type == SND_MIXER_ELEM_SIMPLE); s = elem->private_data; - for (k = 0; k <= CTL_LAST; k++) { - if (s->ctls[k].elem) - snd_mixer_elem_detach(elem, s->ctls[k].elem); - } elem->private_data = NULL; free(s); } -- 2.47.1