I use NDK to allocate large buffer for Java:
allocNativeBuffer(JNIEnv* env, jobject cls, jlong size) {
void* buffer = malloc(size);
jobject directBuffer = env->NewDirectByteBuffer(buffer, size);
jobject globalRef = env->NewGlobalRef(directBuffer);
return globalRef;
}
After using this buffer I deallocate it:
freeNativeBuffer(JNIEnv* env, jobject cls, jobject globalRef) {
void *buffer = env->GetDirectBufferAddress(globalRef);
env->DeleteGlobalRef(globalRef);
free(buffer);
}
On Android 2.2 it works fine, but on Android 4.0.3 application crashes during DeleteGlobalRef call. What am I doing wrong?