From 4afbed15f3b4f88c0190bbb89deba7a6ceae2da7 Mon Sep 17 00:00:00 2001 From: John Reck Date: Mon, 18 Apr 2016 09:29:36 -0700 Subject: [PATCH] Fix NPE checkjni Fixes: 28240259 releasedCallback can be null, which we need to check for Change-Id: Ib218e1c624be8734db5722fc625ebbd72fa099ec --- core/java/android/view/DisplayListCanvas.java | 3 ++- core/jni/android_view_DisplayListCanvas.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java index 2481e049933b5..415c29107a948 100644 --- a/core/java/android/view/DisplayListCanvas.java +++ b/core/java/android/view/DisplayListCanvas.java @@ -17,6 +17,7 @@ package android.view; import android.annotation.NonNull; +import android.annotation.Nullable; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.CanvasProperty; @@ -184,7 +185,7 @@ public class DisplayListCanvas extends Canvas { * any references to the functor, just that the reference from this specific * canvas's display list has been released. */ - public void drawGLFunctor2(long drawGLFunctor, Runnable releasedCallback) { + public void drawGLFunctor2(long drawGLFunctor, @Nullable Runnable releasedCallback) { nCallDrawGLFunction(mNativeCanvasWrapper, drawGLFunctor, releasedCallback); } diff --git a/core/jni/android_view_DisplayListCanvas.cpp b/core/jni/android_view_DisplayListCanvas.cpp index cadfd3d89a2a0..d6f9db58c3612 100644 --- a/core/jni/android_view_DisplayListCanvas.cpp +++ b/core/jni/android_view_DisplayListCanvas.cpp @@ -105,8 +105,10 @@ static void android_view_DisplayListCanvas_callDrawGLFunction(JNIEnv* env, jobje jlong canvasPtr, jlong functorPtr, jobject releasedCallback) { Canvas* canvas = reinterpret_cast(canvasPtr); Functor* functor = reinterpret_cast(functorPtr); - sp bridge(new GlFunctorReleasedCallbackBridge( - env, releasedCallback)); + sp bridge; + if (releasedCallback) { + bridge = new GlFunctorReleasedCallbackBridge(env, releasedCallback); + } canvas->callDrawGLFunction(functor, bridge.get()); }