[waffle] [PATCH 5/8] android: straighten droid_setup_surface error paths
Emil Velikov
emil.l.velikov at gmail.com
Tue Apr 5 22:52:22 UTC 2016
Similar to previous commit drop the unneeded NULL check (left over from
commit c42522c76a94e82907b218c7670c89a8f92f952c (Android: Fix surface
setup segfault) and teardown things in the inverse order of creating
them (by using droid_destroy_surface).
Add a comment about the seemingly strange clear() in
droid_destroy_surface(), and don't forget to teardown the actual surface
object.
XXX: the comment does not cover the question if we should still delete
the object.
Cc: Juha-Pekka Heikkila <juha-pekka.heikkila at linux.intel.com>
Cc: Chad Versace <chad.versace at linux.intel.com>
Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
src/waffle/android/droid_surfaceflingerlink.cpp | 21 +++++++--------------
1 file changed, 7 insertions(+), 14 deletions(-)
diff --git a/src/waffle/android/droid_surfaceflingerlink.cpp b/src/waffle/android/droid_surfaceflingerlink.cpp
index e8c31ab..c3e2fc8 100644
--- a/src/waffle/android/droid_surfaceflingerlink.cpp
+++ b/src/waffle/android/droid_surfaceflingerlink.cpp
@@ -94,7 +94,10 @@ droid_destroy_surface(
droid_surfaceflinger_container* pSFContainer,
droid_ANativeWindow_container* pANWContainer)
{
+ delete pANWContainer->window;
pSFContainer->composer_client->openGlobalTransaction();
+ // Admire the lengthy comment in the implementation of clear() why we
+ // need it over the normal dtor.
pANWContainer->surface_control->clear();
pSFContainer->composer_client->closeGlobalTransaction();
delete pANWContainer;
@@ -113,9 +116,6 @@ droid_setup_surface(
pANWContainer = new droid_ANativeWindow_container;
- if (pANWContainer == NULL)
- goto error;
-
// The signature of SurfaceComposerClient::createSurface() differs across
// Android versions.
#if WAFFLE_ANDROID_MAJOR_VERSION == 4 && \
@@ -137,7 +137,6 @@ droid_setup_surface(
if (pANWContainer->surface_control == NULL) {
wcore_errorf(WAFFLE_ERROR_UNKNOWN,
"Unable to get android::SurfaceControl");
- delete pANWContainer;
goto error;
}
@@ -145,21 +144,19 @@ droid_setup_surface(
if (bRVal != true) {
wcore_errorf(WAFFLE_ERROR_UNKNOWN,
"Acquired android::SurfaceControl is invalid");
- delete pANWContainer;
goto error;
}
pSFContainer->composer_client->openGlobalTransaction();
iRVal = pANWContainer->surface_control->setLayer(droid_magic_surface_z);
+ pSFContainer->composer_client->closeGlobalTransaction();
+
if (iRVal != NO_ERROR) {
wcore_errorf(WAFFLE_ERROR_UNKNOWN,
"Error in android::SurfaceControl->setLayer");
- delete pANWContainer;
- goto error_closeTransaction;
+ goto error;
}
- pSFContainer->composer_client->closeGlobalTransaction();
-
pANWContainer->window = pANWContainer->surface_control->getSurface();
pSFContainer->composer_client->openGlobalTransaction();
@@ -169,7 +166,6 @@ droid_setup_surface(
if (iRVal != NO_ERROR) {
wcore_errorf(WAFFLE_ERROR_UNKNOWN,
"error in android::SurfaceControl->setSize");
- delete pANWContainer;
goto error;
}
@@ -177,11 +173,8 @@ droid_setup_surface(
return pANWContainer;
-error_closeTransaction:
- pSFContainer->composer_client->closeGlobalTransaction();
-
error:
- droid_tear_down_surfaceflinger_link(pSFContainer);
+ droid_destroy_surface(pSFContainer, pANWContainer)
return NULL;
}
--
2.8.0
More information about the waffle
mailing list