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

Commit e6f8a425 authored by Glenn Kasten's avatar Glenn Kasten
Browse files

Fix locking for mMasterVolume and mMute

mMasterVolume and mMute are both protected by mutex in AudioFlinger class, but
there were two places where they were accessed without a mutex.

Also make AudioFlinger::mMasterMute private not protected.

Change-Id: Ia3897daeb5c50313df5bcc071824357526237f3e
parent 6a78cd85
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -646,12 +646,14 @@ status_t AudioFlinger::setMasterMute(bool muted)

float AudioFlinger::masterVolume() const
{
    return mMasterVolume;
    Mutex::Autolock _l(mLock);
    return masterVolume_l();
}

bool AudioFlinger::masterMute() const
{
    return mMasterMute;
    Mutex::Autolock _l(mLock);
    return masterMute_l();
}

status_t AudioFlinger::setStreamVolume(int stream, float value, int output)
@@ -1379,8 +1381,10 @@ AudioFlinger::PlaybackThread::PlaybackThread(const sp<AudioFlinger>& audioFlinge

    readOutputParameters();

    mMasterVolume = mAudioFlinger->masterVolume();
    mMasterMute = mAudioFlinger->masterMute();
    // Assumes constructor is called by AudioFlinger with it's mLock held,
    // but it would be safer to explicitly pass these as parameters
    mMasterVolume = mAudioFlinger->masterVolume_l();
    mMasterMute = mAudioFlinger->masterMute_l();

    for (int stream = 0; stream < AUDIO_STREAM_CNT; stream++) {
        mStreamTypes[stream].volume = mAudioFlinger->streamVolumeInternal(stream);
+7 −0
Original line number Diff line number Diff line
@@ -765,7 +765,9 @@ private:
        int16_t*                        mMixBuffer;
        int                             mSuspended;
        int                             mBytesWritten;
    private:
        bool                            mMasterMute;
    protected:
        SortedVector< wp<Track> >       mActiveTracks;

        virtual int             getTrackName_l() = 0;
@@ -1388,6 +1390,8 @@ mutable Mutex mLock; // mutex for process, commands and handl

                DefaultKeyedVector< int, sp<PlaybackThread> >  mPlaybackThreads;
                PlaybackThread::stream_type_t       mStreamTypes[AUDIO_STREAM_CNT];

                // both are protected by mLock
                float                               mMasterVolume;
                bool                                mMasterMute;

@@ -1399,6 +1403,9 @@ mutable Mutex mLock; // mutex for process, commands and handl
                bool                                mBtNrecIsOff;

                Vector<AudioSessionRef*> mAudioSessionRefs;

                float       masterVolume_l() const  { return mMasterVolume; }
                bool        masterMute_l() const    { return mMasterMute; }
};