diff options
-rw-r--r-- | java/jni/com_zerotierone_sdk_Node.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index d1ec428c..96c958e3 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -333,10 +333,13 @@ namespace { if(retval > 0) { - env->GetByteArrayRegion(bufferObj, 0, retval, (jbyte*)buffer); - env->GetLongArrayRegion(objectSizeObj, 0, 1, (jlong*)out_objectSize); - env->DeleteLocalRef(bufferObj); - env->DeleteLocalRef(objectSizeObj); + jbyte *data = env->GetByteArrayElements(bufferObj, NULL); + memcpy(buffer, data, retval); + env->ReleaseByteArrayElements(bufferObj, data, JNI_ABORT); + + jlong *objSize = env->GetLongArrayElements(objectSizeObj, NULL); + *out_objectSize = (unsigned long)objSize[0]; + env->ReleaseLongArrayElements(objectSizeObj, objSize, JNI_ABORT); } LOGI("Out Object Size: %lu", *out_objectSize); |