diff options
author | Takashi Iwai <tiwai@suse.de> | 2024-11-28 18:04:22 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2024-11-29 11:04:10 +0100 |
commit | aaa55faa2495320e44bc643a917c701f2cc89ee7 (patch) | |
tree | 2f3126ef55468e2154121ed9bb815dd6bfe21591 /sound | |
parent | 2e5bf5b6d2617aff3bd6577bbc8e024cca436d76 (diff) | |
download | lwn-aaa55faa2495320e44bc643a917c701f2cc89ee7.tar.gz lwn-aaa55faa2495320e44bc643a917c701f2cc89ee7.zip |
ALSA: seq: ump: Fix seq port updates per FB info notify
update_port_infos() is called when a UMP FB Info update notification
is received, and this function is supposed to update the attributes of
the corresponding sequencer port. However, the function had a few
issues and it brought to the incorrect states. Namely:
- It tried to get a wrong sequencer info for the update without
correcting the port number with the group-offset 1
- The loop exited immediately when a sequencer port isn't present;
this ended up with the truncation if a sequencer port in the middle
goes away
This patch addresses those bugs.
Fixes: 4a16a3af0571 ("ALSA: seq: ump: Handle FB info update")
Link: https://patch.msgid.link/20241128170423.23351-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/core/seq/seq_ump_client.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sound/core/seq/seq_ump_client.c b/sound/core/seq/seq_ump_client.c index e5d3f4d206bf..e956f17f3792 100644 --- a/sound/core/seq/seq_ump_client.c +++ b/sound/core/seq/seq_ump_client.c @@ -257,12 +257,12 @@ static void update_port_infos(struct seq_ump_client *client) continue; old->addr.client = client->seq_client; - old->addr.port = i; + old->addr.port = ump_group_to_seq_port(i); err = snd_seq_kernel_client_ctl(client->seq_client, SNDRV_SEQ_IOCTL_GET_PORT_INFO, old); if (err < 0) - return; + continue; fill_port_info(new, client, &client->ump->groups[i]); if (old->capability == new->capability && !strcmp(old->name, new->name)) @@ -271,7 +271,7 @@ static void update_port_infos(struct seq_ump_client *client) SNDRV_SEQ_IOCTL_SET_PORT_INFO, new); if (err < 0) - return; + continue; /* notify to system port */ snd_seq_system_client_ev_port_change(client->seq_client, i); } |