From: Jaroslav Kysela Date: Tue, 13 Feb 2001 11:23:26 +0000 (+0000) Subject: Moved the detach code to the more appropriate place. X-Git-Tag: v1.0.3~965 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=cba5c929ec285dd097674d2d85fc863fa8b18d2f;p=alsa-lib.git Moved the detach code to the more appropriate place. --- 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); }