From 59b2fb954ff7bbeabbc02013542e4bfc1a435301 Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Tue, 28 Mar 2017 13:58:42 -0700 Subject: [PATCH] Release JNI references to ByteBuffers passed from native to Java (#3535) --- shell/platform/android/platform_view_android.cc | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/shell/platform/android/platform_view_android.cc b/shell/platform/android/platform_view_android.cc index 4abfe8fa614..5b8775a9dac 100644 --- a/shell/platform/android/platform_view_android.cc +++ b/shell/platform/android/platform_view_android.cc @@ -285,14 +285,15 @@ void PlatformViewAndroid::HandlePlatformMessage( pending_responses_[response_id] = response; } - auto data = message->data(); + fml::jni::ScopedJavaLocalRef message_buffer(env, + env->NewDirectByteBuffer(const_cast(message->data().data()), + message->data().size())); auto java_channel = fml::jni::StringToJavaString(env, message->channel()); message = nullptr; // This call can re-enter in InvokePlatformMessageResponseCallback. FlutterViewHandlePlatformMessage( - env, view.obj(), java_channel.obj(), - env->NewDirectByteBuffer(data.data(), data.size()), response_id); + env, view.obj(), java_channel.obj(), message_buffer.obj(), response_id); } void PlatformViewAndroid::HandlePlatformMessageResponse( @@ -382,8 +383,11 @@ void PlatformViewAndroid::UpdateSemantics( buffer_int32[position++] = child; } + fml::jni::ScopedJavaLocalRef direct_buffer(env, + env->NewDirectByteBuffer(buffer.data(), buffer.size())); + FlutterViewUpdateSemantics( - env, view.obj(), env->NewDirectByteBuffer(buffer.data(), buffer.size()), + env, view.obj(), direct_buffer.obj(), fml::jni::VectorToStringArray(env, strings).obj()); } }