ALSA: jack: Fix endless loop at unique index detection
authorTakashi Iwai <tiwai@suse.de>
Fri, 26 Jun 2015 04:59:57 +0000 (06:59 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 26 Jun 2015 04:59:57 +0000 (06:59 +0200)
While the commit [d0a601c278de: ALSA: jack: Fix the id uniqueness
check] fixes the wrong string check, it leads to a worse result -- the
loop in get_available_index() goes into an endless loop.  The cause is
that snd_ctl_find_id() returns the object assigned to the numid if
it's set.  Thus it points to the previous entry again.

This patch clears the numid field for the next call properly.

Reported-and-tested-by: Tomáš Pružina <pruzinat@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/core/ctljack.c

index 9149a4aefa9548e5b09d8d15a4e28dd90cb5918a..84a3cd683068a3bbf4a752e05c399600ce83572b 100644 (file)
@@ -41,8 +41,11 @@ static int get_available_index(struct snd_card *card, const char *name)
        sid.iface = SNDRV_CTL_ELEM_IFACE_CARD;
        strlcpy(sid.name, name, sizeof(sid.name));
 
-       while (snd_ctl_find_id(card, &sid))
+       while (snd_ctl_find_id(card, &sid)) {
                sid.index++;
+               /* reset numid; otherwise snd_ctl_find_id() hits this again */
+               sid.numid = 0;
+       }
 
        return sid.index;
 }