File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -352,13 +352,17 @@ arrow::Result<std::shared_ptr<arrow::Schema>> FromSchemaByteArray(
352352 arrow::ipc::DictionaryMemo in_memo;
353353 int schemaBytes_len = env->GetArrayLength (schemaBytes);
354354 jbyte* schemaBytes_data = env->GetByteArrayElements (schemaBytes, nullptr );
355+ // Ensure the pinned/copied Java array elements are always released, even when
356+ // schema parsing fails and an error Result is returned early below.
357+ auto release_elements = [&](jbyte* data) {
358+ env->ReleaseByteArrayElements (schemaBytes, data, JNI_ABORT );
359+ };
360+ std::unique_ptr<jbyte, decltype (release_elements)> elements_guard (schemaBytes_data,
361+ release_elements);
355362 auto serialized_schema = std::make_shared<arrow::Buffer>(
356363 reinterpret_cast <uint8_t *>(schemaBytes_data), schemaBytes_len);
357364 arrow::io::BufferReader buf_reader (serialized_schema);
358- ARROW_ASSIGN_OR_RAISE (std::shared_ptr<arrow::Schema> schema,
359- arrow::ipc::ReadSchema (&buf_reader, &in_memo))
360- env->ReleaseByteArrayElements (schemaBytes, schemaBytes_data, JNI_ABORT );
361- return schema;
365+ return arrow::ipc::ReadSchema (&buf_reader, &in_memo);
362366}
363367arrow::Status ExportRecordBatch (JNIEnv* env, const std::shared_ptr<RecordBatch>& batch,
364368 jlong struct_array) {
You can’t perform that action at this time.
0 commit comments