|
@@ -618,8 +618,10 @@ static void snd_mixer_oss_put_volume1_vol(struct snd_mixer_oss_file *fmixer,
|
|
|
if (numid == ID_UNKNOWN)
|
|
|
return;
|
|
|
down_read(&card->controls_rwsem);
|
|
|
- if ((kctl = snd_ctl_find_numid(card, numid)) == NULL)
|
|
|
+ if ((kctl = snd_ctl_find_numid(card, numid)) == NULL) {
|
|
|
+ up_read(&card->controls_rwsem);
|
|
|
return;
|
|
|
+ }
|
|
|
uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL);
|
|
|
uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
|
|
|
if (uinfo == NULL || uctl == NULL)
|
|
@@ -658,7 +660,7 @@ static void snd_mixer_oss_put_volume1_sw(struct snd_mixer_oss_file *fmixer,
|
|
|
return;
|
|
|
down_read(&card->controls_rwsem);
|
|
|
if ((kctl = snd_ctl_find_numid(card, numid)) == NULL) {
|
|
|
- up_read(&fmixer->card->controls_rwsem);
|
|
|
+ up_read(&card->controls_rwsem);
|
|
|
return;
|
|
|
}
|
|
|
uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL);
|
|
@@ -797,7 +799,7 @@ static int snd_mixer_oss_get_recsrc2(struct snd_mixer_oss_file *fmixer, unsigned
|
|
|
uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
|
|
|
if (uinfo == NULL || uctl == NULL) {
|
|
|
err = -ENOMEM;
|
|
|
- goto __unlock;
|
|
|
+ goto __free_only;
|
|
|
}
|
|
|
down_read(&card->controls_rwsem);
|
|
|
kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0);
|
|
@@ -826,6 +828,7 @@ static int snd_mixer_oss_get_recsrc2(struct snd_mixer_oss_file *fmixer, unsigned
|
|
|
err = 0;
|
|
|
__unlock:
|
|
|
up_read(&card->controls_rwsem);
|
|
|
+ __free_only:
|
|
|
kfree(uctl);
|
|
|
kfree(uinfo);
|
|
|
return err;
|
|
@@ -847,7 +850,7 @@ static int snd_mixer_oss_put_recsrc2(struct snd_mixer_oss_file *fmixer, unsigned
|
|
|
uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
|
|
|
if (uinfo == NULL || uctl == NULL) {
|
|
|
err = -ENOMEM;
|
|
|
- goto __unlock;
|
|
|
+ goto __free_only;
|
|
|
}
|
|
|
down_read(&card->controls_rwsem);
|
|
|
kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0);
|
|
@@ -880,6 +883,7 @@ static int snd_mixer_oss_put_recsrc2(struct snd_mixer_oss_file *fmixer, unsigned
|
|
|
err = 0;
|
|
|
__unlock:
|
|
|
up_read(&card->controls_rwsem);
|
|
|
+ __free_only:
|
|
|
kfree(uctl);
|
|
|
kfree(uinfo);
|
|
|
return err;
|