Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6711c26 authored by Mingming Yin's avatar Mingming Yin Committed by Gerrit - the friendly Code Review server
Browse files

hal: fix resource leak issues in platform.c

- fix resource leak issues related to mixer
  controls and file handles

Change-Id: I3675da4504a93a084ad582e5e6eb7c75f38e736e
parent 9c45778f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -882,6 +882,7 @@ static void audio_hwdep_send_cal(struct platform_data *plat_data)
    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)
@@ -936,6 +937,7 @@ void *platform_init(struct audio_device *adev)
                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;
@@ -944,6 +946,7 @@ void *platform_init(struct audio_device *adev)
        }
        retry_num = 0;
        snd_card_num++;
        mixer_close(adev->mixer);
    }

    if (snd_card_num >= MAX_SND_CARD) {
+1 −0
Original line number Diff line number Diff line
@@ -241,6 +241,7 @@ void *platform_init(struct audio_device *adev)
    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;
    }

+9 −0
Original line number Diff line number Diff line
@@ -985,6 +985,7 @@ static void audio_hwdep_send_cal(struct platform_data *plat_data)
    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)
@@ -1027,6 +1028,12 @@ void *platform_init(struct audio_device *adev)
        }

        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);
@@ -1047,6 +1054,7 @@ void *platform_init(struct audio_device *adev)
                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;
@@ -1055,6 +1063,7 @@ void *platform_init(struct audio_device *adev)
        }
        retry_num = 0;
        snd_card_num++;
        mixer_close(adev->mixer);
    }

    if (snd_card_num >= MAX_SND_CARD) {