Skip to content

Commit c045546

Browse files
committed
Address PR comments, delete local references in loop.
1 parent 4618e89 commit c045546

2 files changed

Lines changed: 36 additions & 0 deletions

File tree

java/rocksjni/portal.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9238,6 +9238,7 @@ class WideColumnJni {
92389238
return;
92399239
}
92409240
auto _name = env->GetDirectBufferAddress(jname);
9241+
env->DeleteLocalRef(jname);
92419242
if (_name == nullptr) {
92429243
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(
92439244
env,
@@ -9253,6 +9254,7 @@ class WideColumnJni {
92539254
return;
92549255
}
92559256
auto _value = env->GetDirectBufferAddress(j_value);
9257+
env->DeleteLocalRef(j_value);
92569258
if (_value == nullptr) {
92579259
ROCKSDB_NAMESPACE::RocksDBExceptionJni::ThrowNew(
92589260
env,
@@ -9304,6 +9306,7 @@ class WideColumnJni {
93049306
auto jname_len = env->GetArrayLength(jname);
93059307
auto name = std::make_unique<jbyte[]>(jname_len);
93069308
env->GetByteArrayRegion(jname, 0, jname_len, name.get());
9309+
env->DeleteLocalRef(jname);
93079310
if (env->ExceptionCheck()) {
93089311
return;
93099312
}
@@ -9319,6 +9322,7 @@ class WideColumnJni {
93199322
auto jvalue_len = env->GetArrayLength(j_value);
93209323
auto value = std::make_unique<jbyte[]>(jvalue_len);
93219324
env->GetByteArrayRegion(j_value, 0, jvalue_len, value.get());
9325+
env->DeleteLocalRef(j_value);
93229326
if (env->ExceptionCheck()) {
93239327
return;
93249328
}

java/rocksjni/rocksjni.cc

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)