aaudio: fix resource leak in client tracking
Was using the wrong pid.
Bug: 38267698
Test: run an aaudio example like write_sine.cpp and control-C in the middle
Change-Id: I8819fcdd78354554b926d8b8a59efa1a81fed110
diff --git a/services/oboeservice/AAudioService.cpp b/services/oboeservice/AAudioService.cpp
index 3718bee..585341a 100644
--- a/services/oboeservice/AAudioService.cpp
+++ b/services/oboeservice/AAudioService.cpp
@@ -127,6 +127,7 @@
ALOGD("AAudioService::openStream(): handle = 0x%08X", handle);
serviceStream->setHandle(handle);
pid_t pid = request.getProcessId();
+ serviceStream->setOwnerProcessId(pid);
AAudioClientTracker::getInstance().registerClientStream(pid, serviceStream);
}
return handle;
@@ -140,7 +141,7 @@
ALOGD("AAudioService.closeStream(0x%08X)", streamHandle);
if (serviceStream != nullptr) {
serviceStream->close();
- pid_t pid = IPCThreadState::self()->getCallingPid();
+ pid_t pid = serviceStream->getOwnerProcessId();
AAudioClientTracker::getInstance().unregisterClientStream(pid, serviceStream);
return AAUDIO_OK;
}
diff --git a/services/oboeservice/AAudioServiceStreamBase.h b/services/oboeservice/AAudioServiceStreamBase.h
index d83d5ab..2898211 100644
--- a/services/oboeservice/AAudioServiceStreamBase.h
+++ b/services/oboeservice/AAudioServiceStreamBase.h
@@ -126,6 +126,13 @@
mOwnerUserId = uid;
}
+ pid_t getOwnerProcessId() const {
+ return mOwnerProcessId;
+ }
+ void setOwnerProcessId(pid_t pid) {
+ mOwnerProcessId = pid;
+ }
+
aaudio_handle_t getHandle() const {
return mHandle;
}
@@ -159,6 +166,7 @@
int32_t mSampleRate = AAUDIO_UNSPECIFIED;
int32_t mCapacityInFrames = AAUDIO_UNSPECIFIED;
uid_t mOwnerUserId = -1;
+ pid_t mOwnerProcessId = -1;
private:
aaudio_handle_t mHandle = -1;
};