@@ -887,6 +887,7 @@ jobject Java_org_rocksdb_RocksDB_getEntityDirect(
887887 return nullptr ;
888888 }
889889 auto _name = env->GetDirectBufferAddress (jname);
890+ env->DeleteLocalRef (jname);
890891 if (_name == nullptr ) {
891892 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew (
892893 env,
@@ -904,6 +905,7 @@ jobject Java_org_rocksdb_RocksDB_getEntityDirect(
904905 return nullptr ;
905906 }
906907 auto _value = env->GetDirectBufferAddress (j_value);
908+ env->DeleteLocalRef (j_value);
907909 if (_value == nullptr ) {
908910 ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew (
909911 env,
@@ -972,10 +974,22 @@ void Java_org_rocksdb_RocksDB_getEntity(JNIEnv* env, jclass, jlong jdb_handle,
972974 env, " org/rocksdb/RocksDB$GetEntityResult" );
973975 const auto statusFieldId =
974976 env->GetFieldID (j_status_clazz, " status" , " Lorg/rocksdb/Status;" );
977+ if (env->ExceptionCheck () == JNI_TRUE ) {
978+ return ;
979+ }
975980 const auto namesFieldId = env->GetFieldID (j_status_clazz, " names" , " [[B" );
981+ if (env->ExceptionCheck () == JNI_TRUE ) {
982+ return ;
983+ }
976984 const auto valuesFieldId = env->GetFieldID (j_status_clazz, " values" , " [[B" );
985+ if (env->ExceptionCheck () == JNI_TRUE ) {
986+ return ;
987+ }
977988
978989 env->SetObjectField (jresult, statusFieldId, jniStatus);
990+ if (env->ExceptionCheck () == JNI_TRUE ) {
991+ return ;
992+ }
979993
980994 if (status.ok ()) {
981995 const auto columns_len = static_cast <jsize>(columns.columns ().size ());
@@ -985,11 +999,15 @@ void Java_org_rocksdb_RocksDB_getEntity(JNIEnv* env, jclass, jlong jdb_handle,
985999 auto jnames =
9861000 env->NewObjectArray (columns_len, j_double_byte_array_clazz, nullptr );
9871001 if (jnames == nullptr ) {
1002+ ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew (
1003+ env, " Unable to allocate object array for column names" );
9881004 return ;
9891005 }
9901006 auto jvalues =
9911007 env->NewObjectArray (columns_len, j_double_byte_array_clazz, nullptr );
9921008 if (jvalues == nullptr ) {
1009+ ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew (
1010+ env, " Unable to allocate object array for column values" );
9931011 return ;
9941012 }
9951013
@@ -1005,7 +1023,14 @@ void Java_org_rocksdb_RocksDB_getEntity(JNIEnv* env, jclass, jlong jdb_handle,
10051023 env->SetByteArrayRegion (
10061024 jname, 0 , static_cast <jsize>(column.name ().size ()),
10071025 reinterpret_cast <const jbyte*>(column.name ().data ()));
1026+ if (env->ExceptionCheck () == JNI_TRUE ) {
1027+ return ;
1028+ }
10081029 env->SetObjectArrayElement (jnames, i, jname);
1030+ if (env->ExceptionCheck () == JNI_TRUE ) {
1031+ return ;
1032+ }
1033+ env->DeleteLocalRef (jname); // Delete local reference to help GC.
10091034
10101035 auto j_value =
10111036 env->NewByteArray (static_cast <jsize>(column.value ().size ()));
@@ -1017,7 +1042,14 @@ void Java_org_rocksdb_RocksDB_getEntity(JNIEnv* env, jclass, jlong jdb_handle,
10171042 env->SetByteArrayRegion (
10181043 j_value, 0 , static_cast <jsize>(column.value ().size ()),
10191044 reinterpret_cast <const jbyte*>(column.value ().data ()));
1045+ if (env->ExceptionCheck () == JNI_TRUE ) {
1046+ return ;
1047+ }
10201048 env->SetObjectArrayElement (jvalues, i, j_value);
1049+ if (env->ExceptionCheck () == JNI_TRUE ) {
1050+ return ;
1051+ }
1052+ env->DeleteLocalRef (j_value); // Delete local reference to help GC.
10211053 }
10221054 env->SetObjectField (jresult, namesFieldId, jnames);
10231055 env->SetObjectField (jresult, valuesFieldId, jvalues);
0 commit comments