Harder failures for lazy service clients.
Detect when servicemanager state is inconsistent at runtime.
Bug: 140310064
Change-Id: I59cd737f3e7b7d6e9649a6c77f2ef89fca5efd36
Test: aidl_lazy_test in TH
diff --git a/libs/binder/LazyServiceRegistrar.cpp b/libs/binder/LazyServiceRegistrar.cpp
index 74aece8..d4f26a1 100644
--- a/libs/binder/LazyServiceRegistrar.cpp
+++ b/libs/binder/LazyServiceRegistrar.cpp
@@ -114,6 +114,12 @@
mNumConnectedServices--;
}
+ // if this fails, we should switch this to keep track of clients inside
+ // of mRegisteredServices so that we know which service is double-counted.
+ LOG_ALWAYS_FATAL_IF(mNumConnectedServices > mRegisteredServices.size(),
+ "Invalid state: %zu services have clients, but we only know about %zu",
+ mNumConnectedServices, mRegisteredServices.size());
+
ALOGI("Process has %zu (of %zu available) client(s) in use after notification %s has clients: %d",
mNumConnectedServices, mRegisteredServices.size(),
String8(service->getInterfaceDescriptor()).string(), clients);