Automatically unregister dead services.
Bug: 30804759
Bug: 31632518
Test: mma, hidl_test
Change-Id: Iabbe9d219048c750105e8d7a616c815eb3e1ad50
diff --git a/ServiceManager.h b/ServiceManager.h
index ed3d3ee..f0132af 100644
--- a/ServiceManager.h
+++ b/ServiceManager.h
@@ -15,6 +15,7 @@
namespace V1_0 {
namespace implementation {
+using ::android::hardware::hidl_death_recipient;
using ::android::hardware::hidl_vec;
using ::android::hardware::hidl_string;
using ::android::hardware::hidl_version;
@@ -24,8 +25,9 @@
using ::android::hidl::manager::V1_0::IServiceManager;
using ::android::hidl::manager::V1_0::IServiceNotification;
using ::android::sp;
+using ::android::wp;
-struct ServiceManager : public IServiceManager {
+struct ServiceManager : public IServiceManager, hidl_death_recipient {
// Methods from ::android::hidl::manager::V1_0::IServiceManager follow.
Return<void> get(const hidl_string& fqName,
const hidl_string& name,
@@ -42,7 +44,9 @@
const hidl_string& name,
const sp<IServiceNotification>& callback) override;
+ virtual void serviceDied(uint64_t cookie, const wp<IBase>& who);
private:
+ bool remove(const wp<IBase>& who);
using InstanceMap = std::multimap<
std::string, // instance name e.x. "manager"