Distinguish between createSurface error codes.
Thusly preventing killing applications in the case of
a missing parent.
Bug: 73664284
Test: Manual. go/wm-smoke.
Change-Id: Iafcd578765fa8fcf603c3f5a6a546e6986f297e8
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 8ca5062..4ee3724 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -115,9 +115,13 @@
ScopedUtfChars name(env, nameStr);
sp<SurfaceComposerClient> client(android_view_SurfaceSession_getClient(env, sessionObj));
SurfaceControl *parent = reinterpret_cast<SurfaceControl*>(parentObject);
- sp<SurfaceControl> surface = client->createSurface(
- String8(name.c_str()), w, h, format, flags, parent, windowType, ownerUid);
- if (surface == NULL) {
+ sp<SurfaceControl> surface;
+ status_t err = client->createSurfaceChecked(
+ String8(name.c_str()), w, h, format, &surface, flags, parent, windowType, ownerUid);
+ if (err == NAME_NOT_FOUND) {
+ jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
+ return 0;
+ } else if (err != NO_ERROR) {
jniThrowException(env, OutOfResourcesException, NULL);
return 0;
}