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

Commit caafba40 authored by Eric Laurent's avatar Eric Laurent
Browse files

audio policy: fix virtual called from constructor

Call initialize() after constructing AudioPolicyManager
from factory to avoid calling virtual methods from constructor.

Bug: 136491567
Test: make
Change-Id: Ie0b591d90e643b1fd1c326f9731dc656b38230dc
parent 62fda292
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -21,7 +21,13 @@ namespace android {
extern "C" AudioPolicyInterface* createAudioPolicyManager(
        AudioPolicyClientInterface *clientInterface)
{
    return new AudioPolicyManager(clientInterface);
    AudioPolicyManager *apm = new AudioPolicyManager(clientInterface);
    status_t status = apm->initialize();
    if (status != NO_ERROR) {
        delete apm;
        apm = nullptr;
    }
    return apm;
}

extern "C" void destroyAudioPolicyManager(AudioPolicyInterface *interface)
+0 −1
Original line number Diff line number Diff line
@@ -4306,7 +4306,6 @@ AudioPolicyManager::AudioPolicyManager(AudioPolicyClientInterface *clientInterfa
        : AudioPolicyManager(clientInterface, false /*forTesting*/)
{
    loadConfig();
    initialize();
}

void AudioPolicyManager::loadConfig() {
+2 −1
Original line number Diff line number Diff line
@@ -307,6 +307,8 @@ public:
            return volumeGroup != VOLUME_GROUP_NONE ? NO_ERROR : BAD_VALUE;
        }

        status_t initialize();

protected:
        // A constructor that allows more fine-grained control over initialization process,
        // used in automatic tests.
@@ -321,7 +323,6 @@ protected:
        //   - initialize.
        AudioPolicyConfig& getConfig() { return mConfig; }
        void loadConfig();
        status_t initialize();

        // From AudioPolicyManagerObserver
        virtual const AudioPatchCollection &getAudioPatches() const