audio: hal: Fix for memory leaks.
Change-Id: I3206b5a05869f3eb2c4dffaaf44ebf4ce0f08b4a
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 2407cfc..554b624 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1909,6 +1909,7 @@
snd_device_t d1 = uc->out_snd_device;
snd_device_t d2 = new_snd_device;
+ snd_device_t ret = 0;
list_init(&a1);
list_init(&a2);
@@ -1939,28 +1940,39 @@
__func__,
list_length(&a1) > 1 ? d1 : d2);
}
+ ret = d2;
goto end;
}
if (platform_check_backends_match(d3[0], d3[1])) {
- return d2; // case 5
+ ret = d2;
+ goto end; // case 5
} else {
if ((list_length(&a1) > 1) && (list_length(&a2) > 1) &&
- platform_check_backends_match(d1, d2))
- return d2; //case 9
- if (list_length(&a1) > 1)
- return d1; //case 7
+ platform_check_backends_match(d1, d2)) {
+ ret = d2;
+ goto end; //case 9
+ }
+ if (list_length(&a1) > 1) {
+ ret = d1;
+ goto end; //case 7
+ }
// check if d1 is related to any of d3's
- if (d1 == d3[0] || d1 == d3[1])
- return d1; // case 1
- else
- return d3[1]; // case 8
+ if (d1 == d3[0] || d1 == d3[1]) {
+ ret = d1;
+ goto end; // case 1
+ } else {
+ ret = d3[1];
+ goto end; // case 8
+ }
}
} else {
if (platform_check_backends_match(d1, d2)) {
- return d2; // case 2, 4
+ ret = d2;
+ goto end; // case 2, 4
} else {
- return d1; // case 6, 3
+ ret = d1;
+ goto end; // case 6, 3
}
}
@@ -1968,7 +1980,9 @@
clear_devices(&a2);
end:
- return d2; // return whatever was calculated before.
+ clear_devices(&a1);
+ clear_devices(&a2);
+ return ret; // return whatever was calculated before.
}
static void check_usecases_codec_backend(struct audio_device *adev,