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

Commit d457c970 authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Track pid for each session

so they can be properly freed.

Change-Id: I6f389035bc29e74e7c367c1c6d0252b180f666b3
parent 1d6fa7af
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -141,8 +141,8 @@ public:
    static uint32_t getInputFramesLost(audio_io_handle_t ioHandle);

    static int newAudioSessionId();
    static void acquireAudioSessionId(int audioSession);
    static void releaseAudioSessionId(int audioSession);
    static void acquireAudioSessionId(int audioSession, pid_t pid);
    static void releaseAudioSessionId(int audioSession, pid_t pid);

    // types of io configuration change events received with ioConfigChanged()
    enum io_config_event {
+7 −3
Original line number Diff line number Diff line
@@ -190,7 +190,8 @@ public:
                                    int sessionId        = AUDIO_SESSION_ALLOCATE,
                                    transfer_type transferType = TRANSFER_DEFAULT,
                                    const audio_offload_info_t *offloadInfo = NULL,
                                    int uid = -1);
                                    int uid = -1,
                                    pid_t pid = -1);

    /* Creates an audio track and registers it with AudioFlinger.
     * With this constructor, the track is configured for static buffer mode.
@@ -215,7 +216,8 @@ public:
                                    int sessionId       = AUDIO_SESSION_ALLOCATE,
                                    transfer_type transferType = TRANSFER_DEFAULT,
                                    const audio_offload_info_t *offloadInfo = NULL,
                                    int uid = -1);
                                    int uid = -1,
                                    pid_t pid = -1);

    /* Terminates the AudioTrack and unregisters it from AudioFlinger.
     * Also destroys all resources associated with the AudioTrack.
@@ -253,7 +255,8 @@ public:
                            int sessionId       = AUDIO_SESSION_ALLOCATE,
                            transfer_type transferType = TRANSFER_DEFAULT,
                            const audio_offload_info_t *offloadInfo = NULL,
                            int uid = -1);
                            int uid = -1,
                            pid_t pid = -1);

    /* Result of constructing the AudioTrack. This must be checked for successful initialization
     * before using any AudioTrack API (except for set()), because using
@@ -757,6 +760,7 @@ private:
    sp<DeathNotifier>       mDeathNotifier;
    uint32_t                mSequence;              // incremented for each new IAudioTrack attempt
    int                     mClientUid;
    pid_t                   mClientPid;
};

class TimedAudioTrack : public AudioTrack
+2 −2
Original line number Diff line number Diff line
@@ -180,8 +180,8 @@ public:

    virtual int newAudioSessionId() = 0;

    virtual void acquireAudioSessionId(int audioSession) = 0;
    virtual void releaseAudioSessionId(int audioSession) = 0;
    virtual void acquireAudioSessionId(int audioSession, pid_t pid) = 0;
    virtual void releaseAudioSessionId(int audioSession, pid_t pid) = 0;

    virtual status_t queryNumberEffects(uint32_t *numEffects) const = 0;

+2 −2
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ AudioRecord::~AudioRecord()
            mAudioRecord.clear();
        }
        IPCThreadState::self()->flushCommands();
        AudioSystem::releaseAudioSessionId(mSessionId);
        AudioSystem::releaseAudioSessionId(mSessionId, -1);
    }
}

@@ -266,7 +266,7 @@ status_t AudioRecord::set(
    mMarkerReached = false;
    mNewPosition = 0;
    mUpdatePeriod = 0;
    AudioSystem::acquireAudioSessionId(mSessionId);
    AudioSystem::acquireAudioSessionId(mSessionId, -1);
    mSequence = 1;
    mObservedSequence = mSequence;
    mInOverrun = false;
+4 −4
Original line number Diff line number Diff line
@@ -435,19 +435,19 @@ int AudioSystem::newAudioSessionId()
    return af->newAudioSessionId();
}

void AudioSystem::acquireAudioSessionId(int audioSession)
void AudioSystem::acquireAudioSessionId(int audioSession, pid_t pid)
{
    const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
    if (af != 0) {
        af->acquireAudioSessionId(audioSession);
        af->acquireAudioSessionId(audioSession, pid);
    }
}

void AudioSystem::releaseAudioSessionId(int audioSession)
void AudioSystem::releaseAudioSessionId(int audioSession, pid_t pid)
{
    const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
    if (af != 0) {
        af->releaseAudioSessionId(audioSession);
        af->releaseAudioSessionId(audioSession, pid);
    }
}

Loading