diff --git a/services/oboeservice/AAudioClientTracker.cpp b/services/oboeservice/AAudioClientTracker.cpp index 857256156e..6e14434c33 100644 --- a/services/oboeservice/AAudioClientTracker.cpp +++ b/services/oboeservice/AAudioClientTracker.cpp @@ -75,10 +75,10 @@ aaudio_result_t AAudioClientTracker::registerClient(pid_t pid, std::lock_guard lock(mLock); if (mNotificationClients.count(pid) == 0) { - sp notificationClient = new NotificationClient(pid); + sp binder = IInterface::asBinder(client); + sp notificationClient = new NotificationClient(pid, binder); mNotificationClients[pid] = notificationClient; - sp binder = IInterface::asBinder(client); status_t status = binder->linkToDeath(notificationClient); ALOGW_IF(status != NO_ERROR, "registerClient() linkToDeath = %d\n", status); return AAudioConvert_androidToAAudioResult(status); @@ -113,7 +113,7 @@ AAudioClientTracker::registerClientStream(pid_t pid, sp if (notificationClient == 0) { // This will get called the first time the audio server registers an internal stream. ALOGV("registerClientStream(%d,) unrecognized pid\n", pid); - notificationClient = new NotificationClient(pid); + notificationClient = new NotificationClient(pid, nullptr); mNotificationClients[pid] = notificationClient; } notificationClient->registerClientStream(serviceStream); @@ -136,8 +136,8 @@ AAudioClientTracker::unregisterClientStream(pid_t pid, return AAUDIO_OK; } -AAudioClientTracker::NotificationClient::NotificationClient(pid_t pid) - : mProcessId(pid) { +AAudioClientTracker::NotificationClient::NotificationClient(pid_t pid, const sp& binder) + : mProcessId(pid), mBinder(binder) { } AAudioClientTracker::NotificationClient::~NotificationClient() { diff --git a/services/oboeservice/AAudioClientTracker.h b/services/oboeservice/AAudioClientTracker.h index accf1a7b31..00ff467751 100644 --- a/services/oboeservice/AAudioClientTracker.h +++ b/services/oboeservice/AAudioClientTracker.h @@ -73,7 +73,7 @@ private: */ class NotificationClient : public IBinder::DeathRecipient { public: - NotificationClient(pid_t pid); + NotificationClient(pid_t pid, const android::sp& binder); virtual ~NotificationClient(); int32_t getStreamCount(); @@ -91,6 +91,8 @@ private: mutable std::mutex mLock; const pid_t mProcessId; std::set> mStreams; + // hold onto binder to receive death notifications + android::sp mBinder; }; mutable std::mutex mLock;