summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2014-02-13 22:44:29 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-02-13 22:44:30 +0000
commitc940c38242e8e0265db25a646ad63263934f2bb9 (patch)
tree6da7629ff9195d916a7ee7974dced87e830bce51 /services
parent240abcc4bf661a10ffca24859945796acc76ac6e (diff)
parentd457c970c8d08519cd77280a90b61ae1e342cfe3 (diff)
downloadframeworks_av-c940c38242e8e0265db25a646ad63263934f2bb9.zip
frameworks_av-c940c38242e8e0265db25a646ad63263934f2bb9.tar.gz
frameworks_av-c940c38242e8e0265db25a646ad63263934f2bb9.tar.bz2
Merge "Track pid for each session"
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/AudioFlinger.cpp16
-rw-r--r--services/audioflinger/AudioFlinger.h4
2 files changed, 13 insertions, 7 deletions
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 21bd2f4..b74fa89 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -1929,18 +1929,21 @@ int AudioFlinger::newAudioSessionId()
return nextUniqueId();
}
-void AudioFlinger::acquireAudioSessionId(int audioSession)
+void AudioFlinger::acquireAudioSessionId(int audioSession, pid_t pid)
{
Mutex::Autolock _l(mLock);
pid_t caller = IPCThreadState::self()->getCallingPid();
- ALOGV("acquiring %d from %d", audioSession, caller);
+ ALOGV("acquiring %d from %d, for %d", audioSession, caller, pid);
+ if (pid != -1 && (caller == getpid_cached)) {
+ caller = pid;
+ }
// Ignore requests received from processes not known as notification client. The request
// is likely proxied by mediaserver (e.g CameraService) and releaseAudioSessionId() can be
// called from a different pid leaving a stale session reference. Also we don't know how
// to clear this reference if the client process dies.
if (mNotificationClients.indexOfKey(caller) < 0) {
- ALOGV("acquireAudioSessionId() unknown client %d for session %d", caller, audioSession);
+ ALOGW("acquireAudioSessionId() unknown client %d for session %d", caller, audioSession);
return;
}
@@ -1957,11 +1960,14 @@ void AudioFlinger::acquireAudioSessionId(int audioSession)
ALOGV(" added new entry for %d", audioSession);
}
-void AudioFlinger::releaseAudioSessionId(int audioSession)
+void AudioFlinger::releaseAudioSessionId(int audioSession, pid_t pid)
{
Mutex::Autolock _l(mLock);
pid_t caller = IPCThreadState::self()->getCallingPid();
- ALOGV("releasing %d from %d", audioSession, caller);
+ ALOGV("releasing %d from %d for %d", audioSession, caller, pid);
+ if (pid != -1 && (caller == getpid_cached)) {
+ caller = pid;
+ }
size_t num = mAudioSessionRefs.size();
for (size_t i = 0; i< num; i++) {
AudioSessionRef *ref = mAudioSessionRefs.itemAt(i);
diff --git a/services/audioflinger/AudioFlinger.h b/services/audioflinger/AudioFlinger.h
index 459d2ec..4799beb 100644
--- a/services/audioflinger/AudioFlinger.h
+++ b/services/audioflinger/AudioFlinger.h
@@ -193,9 +193,9 @@ public:
virtual int newAudioSessionId();
- virtual void acquireAudioSessionId(int audioSession);
+ virtual void acquireAudioSessionId(int audioSession, pid_t pid);
- virtual void releaseAudioSessionId(int audioSession);
+ virtual void releaseAudioSessionId(int audioSession, pid_t pid);
virtual status_t queryNumberEffects(uint32_t *numEffects) const;