hal: fix resource leak issues in platform.c
- fix resource leak issues related to mixer
controls and file handles
Change-Id: I3675da4504a93a084ad582e5e6eb7c75f38e736e
diff --git a/msm8909/hal/msm8916/platform.c b/msm8909/hal/msm8916/platform.c
index 1235c28..547ecd7 100644
--- a/msm8909/hal/msm8916/platform.c
+++ b/msm8909/hal/msm8916/platform.c
@@ -1033,6 +1033,7 @@
if (acdb_loader_get_calibration == NULL) {
ALOGE("%s: ERROR. dlsym Error:%s acdb_loader_get_calibration", __func__,
dlerror());
+ close(fd);
return;
}
if (send_codec_cal(acdb_loader_get_calibration, fd) < 0)
@@ -1186,6 +1187,7 @@
ALOGE("%s: Failed to init audio route controls, aborting.",
__func__);
free(my_data);
+ mixer_close(adev->mixer);
return NULL;
}
adev->snd_card = snd_card_num;
@@ -1195,6 +1197,7 @@
}
retry_num = 0;
snd_card_num++;
+ mixer_close(adev->mixer);
}
if (snd_card_num >= MAX_SND_CARD) {
diff --git a/msm8909/hal/msm8960/platform.c b/msm8909/hal/msm8960/platform.c
index dcb85aa..3eb9b41 100644
--- a/msm8909/hal/msm8960/platform.c
+++ b/msm8909/hal/msm8960/platform.c
@@ -240,6 +240,7 @@
adev->audio_route = audio_route_init(MIXER_CARD, MIXER_XML_PATH);
if (!adev->audio_route) {
ALOGE("%s: Failed to init audio route controls, aborting.", __func__);
+ mixer_close(adev->mixer);
return NULL;
}
diff --git a/msm8909/hal/msm8974/platform.c b/msm8909/hal/msm8974/platform.c
index cc1f173..cfe5d08 100644
--- a/msm8909/hal/msm8974/platform.c
+++ b/msm8909/hal/msm8974/platform.c
@@ -934,6 +934,7 @@
if (acdb_loader_get_calibration == NULL) {
ALOGE("%s: ERROR. dlsym Error:%s acdb_loader_get_calibration", __func__,
dlerror());
+ close(fd);
return;
}
if (send_codec_cal(acdb_loader_get_calibration, fd) < 0)
@@ -1007,6 +1008,12 @@
}
snd_card_name = mixer_get_name(adev->mixer);
+ if (!snd_card_name) {
+ ALOGE("failed to allocate memory for snd_card_name\n");
+ free(my_data);
+ mixer_close(adev->mixer);
+ return NULL;
+ }
ALOGV("%s: snd_card_name: %s", __func__, snd_card_name);
my_data->hw_info = hw_info_init(snd_card_name);
@@ -1027,6 +1034,8 @@
ALOGE("%s: Failed to init audio route controls, aborting.",
__func__);
free(my_data);
+ free(snd_card_name);
+ mixer_close(adev->mixer);
return NULL;
}
adev->snd_card = snd_card_num;
@@ -1035,6 +1044,7 @@
}
retry_num = 0;
snd_card_num++;
+ mixer_close(adev->mixer);
}
if (snd_card_num >= MAX_SND_CARD) {