diff options
author | Eino-Ville Talvala <etalvala@google.com> | 2017-02-01 15:27:41 -0800 |
---|---|---|
committer | Eino-Ville Talvala <etalvala@google.com> | 2017-02-02 12:13:16 -0800 |
commit | f86177dd930680bf939ef33b9977db27628d7aff (patch) | |
tree | 113868c2d2eef459f6538acd0a6d9ff9ffb1d84d /camera/CameraBase.cpp | |
parent | 5337437a1cd62a96a0c772e2ff0738e372d8aa93 (diff) |
CameraBase: Don't return an sp<> by reference
If the server dies, the binder death callback clears out
the global camera service sp<>, and any current references to it
will become quite unhappy.
Test: Camera CTS passes
Bug: 31992879
Change-Id: I2966bed35d0319e3f26e3d4b1b8dc08006a22348
Diffstat (limited to 'camera/CameraBase.cpp')
-rw-r--r-- | camera/CameraBase.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/camera/CameraBase.cpp b/camera/CameraBase.cpp index 15d7715ac4..72951fcbf7 100644 --- a/camera/CameraBase.cpp +++ b/camera/CameraBase.cpp @@ -86,7 +86,7 @@ namespace { // establish binder interface to camera service template <typename TCam, typename TCamTraits> -const sp<::android::hardware::ICameraService>& CameraBase<TCam, TCamTraits>::getCameraService() +const sp<::android::hardware::ICameraService> CameraBase<TCam, TCamTraits>::getCameraService() { Mutex::Autolock _l(gLock); if (gCameraService.get() == 0) { @@ -118,7 +118,7 @@ sp<TCam> CameraBase<TCam, TCamTraits>::connect(int cameraId, ALOGV("%s: connect", __FUNCTION__); sp<TCam> c = new TCam(cameraId); sp<TCamCallbacks> cl = c; - const sp<::android::hardware::ICameraService>& cs = getCameraService(); + const sp<::android::hardware::ICameraService> cs = getCameraService(); binder::Status ret; if (cs != nullptr) { @@ -226,7 +226,7 @@ int CameraBase<TCam, TCamTraits>::getNumberOfCameras() { template <typename TCam, typename TCamTraits> status_t CameraBase<TCam, TCamTraits>::getCameraInfo(int cameraId, struct hardware::CameraInfo* cameraInfo) { - const sp<::android::hardware::ICameraService>& cs = getCameraService(); + const sp<::android::hardware::ICameraService> cs = getCameraService(); if (cs == 0) return UNKNOWN_ERROR; binder::Status res = cs->getCameraInfo(cameraId, cameraInfo); return res.isOk() ? OK : res.serviceSpecificErrorCode(); |