diff options
| -rw-r--r-- | core/java/android/view/SurfaceControl.java | 2 | ||||
| -rw-r--r-- | core/jni/android_view_SurfaceControl.cpp | 10 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowStateAnimator.java | 2 |
3 files changed, 9 insertions, 5 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index b7524fb1a522..7ff4f21dd26f 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -566,7 +566,7 @@ public class SurfaceControl implements Parcelable { */ private SurfaceControl(SurfaceSession session, String name, int w, int h, int format, int flags, SurfaceControl parent, int windowType, int ownerUid) - throws OutOfResourcesException { + throws OutOfResourcesException, IllegalArgumentException { if (session == null) { throw new IllegalArgumentException("session must not be null"); } diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 8ca506254f74..4ee3724d554d 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -115,9 +115,13 @@ static jlong nativeCreate(JNIEnv* env, jclass clazz, jobject sessionObj, 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; } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 13f05e088cb1..eb055accbbaa 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -507,7 +507,7 @@ class WindowStateAnimator { mDrawState = NO_SURFACE; return null; } catch (Exception e) { - Slog.e(TAG, "Exception creating surface", e); + Slog.e(TAG, "Exception creating surface (parent dead?)", e); mDrawState = NO_SURFACE; return null; } |