Skip to content

Commit 03d310c

Browse files
asimshankartensorflower-gardener
authored andcommitted
Java: Fix 8-byte leak when constructing graph operations.
Thanks to @riklopfer for reporting in tensorflow#11948 PiperOrigin-RevId: 167032430
1 parent 797ca0d commit 03d310c

1 file changed

Lines changed: 10 additions & 4 deletions

File tree

tensorflow/java/src/main/native/operation_builder_jni.cc

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,10 @@ JNIEXPORT jlong JNICALL Java_org_tensorflow_OperationBuilder_finish(
7575
TF_Status* status = TF_NewStatus();
7676
TF_Operation* op = TF_FinishOperation(d, status);
7777
if (throwExceptionIfNotOK(env, status)) {
78+
TF_DeleteStatus(status);
7879
return reinterpret_cast<jlong>(op);
7980
}
81+
TF_DeleteStatus(status);
8082
return 0;
8183
}
8284

@@ -211,6 +213,7 @@ JNIEXPORT void JNICALL Java_org_tensorflow_OperationBuilder_setAttrTensor(
211213
TF_Status* status = TF_NewStatus();
212214
TF_SetAttrTensor(d, cname, t, status);
213215
throwExceptionIfNotOK(env, status);
216+
TF_DeleteStatus(status);
214217
env->ReleaseStringUTFChars(name, cname);
215218
}
216219

@@ -234,6 +237,7 @@ JNIEXPORT void JNICALL Java_org_tensorflow_OperationBuilder_setAttrTensorList(
234237
TF_Status* status = TF_NewStatus();
235238
TF_SetAttrTensorList(d, cname, tensors.get(), n, status);
236239
throwExceptionIfNotOK(env, status);
240+
TF_DeleteStatus(status);
237241
env->ReleaseStringUTFChars(name, cname);
238242
}
239243

@@ -259,20 +263,22 @@ JNIEXPORT void JNICALL Java_org_tensorflow_OperationBuilder_setAttrShape(
259263
}
260264

261265
JNIEXPORT void JNICALL Java_org_tensorflow_OperationBuilder_setAttrStringList(
262-
JNIEnv* env, jclass object, jlong handle, jstring name, jobjectArray values) {
266+
JNIEnv* env, jclass object, jlong handle, jstring name,
267+
jobjectArray values) {
263268
TF_OperationDescription* d = requireHandle(env, handle);
264269
if (d == nullptr) return;
265270
const char* cname = env->GetStringUTFChars(name, nullptr);
266271
int num_values = env->GetArrayLength(values);
267272
static_assert(sizeof(jbyte) == 1,
268273
"Require Java byte to be represented as a single byte");
269274
std::unique_ptr<jbyteArray[]> jarrays(new jbyteArray[num_values]);
270-
std::unique_ptr<jbyte*[]> jvalues(new jbyte*[num_values]);
271-
std::unique_ptr<void*[]> cvalues(new void*[num_values]);
275+
std::unique_ptr<jbyte* []> jvalues(new jbyte*[num_values]);
276+
std::unique_ptr<void* []> cvalues(new void*[num_values]);
272277
std::unique_ptr<size_t[]> lengths(new size_t[num_values]);
273278

274279
for (int i = 0; i < num_values; ++i) {
275-
jbyteArray v = static_cast<jbyteArray>(env->GetObjectArrayElement(values, i));
280+
jbyteArray v =
281+
static_cast<jbyteArray>(env->GetObjectArrayElement(values, i));
276282
jarrays[i] = v;
277283
jvalues[i] = env->GetByteArrayElements(v, nullptr);
278284
cvalues[i] = jvalues[i];

0 commit comments

Comments
 (0)