From 24b44157d3a9736fce60479cbbbabadf53471df0 Mon Sep 17 00:00:00 2001 From: Shuzhen Wang Date: Fri, 20 Sep 2019 10:38:11 -0700 Subject: [PATCH] Camera: Delay pingCameraServiceProxy to end of onFirstRef The cameraservice is only registered to service manager after onFirstRef is returned. To reduce the probability of getBinderService() call returning null, move pingCameraServiceProxy to end of onFirstRef(). Also add debug messages in onFirstRef and main() for better diagnoses. Test: Camera CTS Bug: 140414594 Change-Id: I52defd1c138ade57ebc5181c42aff30921fbeaeb --- camera/cameraserver/main_cameraserver.cpp | 1 + services/camera/libcameraservice/CameraService.cpp | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/camera/cameraserver/main_cameraserver.cpp b/camera/cameraserver/main_cameraserver.cpp index 53b3d84894..cef8ef5456 100644 --- a/camera/cameraserver/main_cameraserver.cpp +++ b/camera/cameraserver/main_cameraserver.cpp @@ -34,6 +34,7 @@ int main(int argc __unused, char** argv __unused) sp sm = defaultServiceManager(); ALOGI("ServiceManager: %p", sm.get()); CameraService::instantiate(); + ALOGI("ServiceManager: %p done instantiate", sm.get()); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); } diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index 048d0e6bce..2f889573be 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -153,8 +153,6 @@ void CameraService::onFirstRef() mInitialized = true; } - CameraService::pingCameraServiceProxy(); - mUidPolicy = new UidPolicy(this); mUidPolicy->registerSelf(); mSensorPrivacyPolicy = new SensorPrivacyPolicy(this); @@ -164,6 +162,11 @@ void CameraService::onFirstRef() ALOGE("%s: Failed to register default android.frameworks.cameraservice.service@1.0", __FUNCTION__); } + + // This needs to be last call in this function, so that it's as close to + // ServiceManager::addService() as possible. + CameraService::pingCameraServiceProxy(); + ALOGI("CameraService pinged cameraservice proxy"); } status_t CameraService::enumerateProviders() {