branch-2.1: [Bug](udf) should delete local ref when return error msg #48609 (#49528)

Problem Summary:
cherry-pick from master (#48609)
This commit is contained in:
zhangstar333
2025-03-28 09:57:18 +08:00
committed by GitHub
parent 60f6975850
commit 63fb74b480
2 changed files with 5 additions and 11 deletions

View File

@ -203,9 +203,8 @@ public:
jobject output_map = JniUtil::convert_to_java_map(env, output_params);
long output_address =
env->CallLongMethod(executor_obj, executor_get_value_id, place, output_map);
RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env));
env->DeleteLocalRef(output_map);
RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env));
return JniConnector::fill_block(&output_block, {0}, output_address);
}
@ -288,16 +287,12 @@ public:
void create(AggregateDataPtr __restrict place) const override {
new (place) Data(argument_types.size());
if (_first_created) {
Status status = Status::OK();
SAFE_CREATE(RETURN_IF_STATUS_ERROR(status,
this->data(place).init_udaf(_fn, _local_location)),
{
static_cast<void>(this->data(place).destroy());
this->data(place).~Data();
});
Status status = this->data(place).init_udaf(_fn, _local_location);
_first_created = false;
_exec_place = place;
if (UNLIKELY(!status.ok())) {
static_cast<void>(this->data(place).destroy());
this->data(place).~Data();
throw doris::Exception(ErrorCode::INTERNAL_ERROR, status.to_string());
}
}

View File

@ -114,10 +114,9 @@ Status JavaFunctionCall::execute_impl(FunctionContext* context, Block& block,
jobject output_map = JniUtil::convert_to_java_map(env, output_params);
long output_address = env->CallLongMethod(jni_ctx->executor, jni_ctx->executor_evaluate_id,
input_map, output_map);
RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env));
env->DeleteLocalRef(input_map);
env->DeleteLocalRef(output_map);
RETURN_IF_ERROR(JniUtil::GetJniExceptionMsg(env));
return JniConnector::fill_block(&block, {result}, output_address);
}