From de2c0740ad81d982803e450693a47f569b0c306e Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Thu, 14 Mar 2024 11:03:53 +0800 Subject: [PATCH 1/3] [fix](jdbc catalog) fix jdbc-connector coredump as get env return nullptr --- be/src/vec/exec/vjdbc_connector.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/be/src/vec/exec/vjdbc_connector.cpp b/be/src/vec/exec/vjdbc_connector.cpp index 41acaf00fb88d3..a7e84b9e323adf 100644 --- a/be/src/vec/exec/vjdbc_connector.cpp +++ b/be/src/vec/exec/vjdbc_connector.cpp @@ -83,8 +83,12 @@ Status JdbcConnector::close(Status /*unused*/) { if (_is_in_transaction) { RETURN_IF_ERROR(abort_trans()); } - JNIEnv* env; - RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); + JNIEnv* env = nullptr; + Status status = JniUtil::GetJNIEnv(&env); + if (!status.ok() || env == nullptr) { + LOG(WARNING) << "errors while get jni env " << status; + return status; + } env->DeleteGlobalRef(_executor_factory_clazz); env->DeleteGlobalRef(_executor_clazz); DELETE_BASIC_JAVA_CLAZZ_REF(object) From 158e9da33ec7bfe2a414c9eceb8d1f83d4eac105 Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Thu, 14 Mar 2024 11:59:18 +0800 Subject: [PATCH 2/3] [fix](jdbc catalog) fix jdbc-connector coredump as get env return nullptr --- be/src/util/jni-util.h | 11 +++++++++-- be/src/vec/exec/vjdbc_connector.cpp | 6 +----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/be/src/util/jni-util.h b/be/src/util/jni-util.h index 317ba48d3d19e7..ca305c32bf1416 100644 --- a/be/src/util/jni-util.h +++ b/be/src/util/jni-util.h @@ -52,9 +52,16 @@ class JniUtil { static Status GetJNIEnv(JNIEnv** env) { if (tls_env_) { *env = tls_env_; - return Status::OK(); + } else { + Status status = GetJNIEnvSlowPath(env); + if (!status.ok()) { + return status; + } } - return GetJNIEnvSlowPath(env); + if (*env == nullptr) { + return Status::RuntimeError("Failed to get JNIEnv: it is nullptr."); + } + return Status::OK(); } static Status GetGlobalClassRef(JNIEnv* env, const char* class_str, diff --git a/be/src/vec/exec/vjdbc_connector.cpp b/be/src/vec/exec/vjdbc_connector.cpp index a7e84b9e323adf..6a5aa0fdc38769 100644 --- a/be/src/vec/exec/vjdbc_connector.cpp +++ b/be/src/vec/exec/vjdbc_connector.cpp @@ -84,11 +84,7 @@ Status JdbcConnector::close(Status /*unused*/) { RETURN_IF_ERROR(abort_trans()); } JNIEnv* env = nullptr; - Status status = JniUtil::GetJNIEnv(&env); - if (!status.ok() || env == nullptr) { - LOG(WARNING) << "errors while get jni env " << status; - return status; - } + RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); env->DeleteGlobalRef(_executor_factory_clazz); env->DeleteGlobalRef(_executor_clazz); DELETE_BASIC_JAVA_CLAZZ_REF(object) From aa9b835f6fc452b0a2277cf26853bf2265c514fc Mon Sep 17 00:00:00 2001 From: zy-kkk Date: Thu, 14 Mar 2024 12:08:56 +0800 Subject: [PATCH 3/3] 1 --- be/src/util/jni-util.cpp | 4 ++-- be/src/vec/aggregate_functions/aggregate_function_java_udaf.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/be/src/util/jni-util.cpp b/be/src/util/jni-util.cpp index 764fc812cba010..6e66f97ddae6fb 100644 --- a/be/src/util/jni-util.cpp +++ b/be/src/util/jni-util.cpp @@ -141,7 +141,7 @@ const std::string GetDorisJNIClasspathOption() { jvm_options[i] = {const_cast(options[i].c_str()), nullptr}; } - JNIEnv* env; + JNIEnv* env = nullptr; JavaVMInitArgs vm_args; vm_args.version = JNI_VERSION_1_8; vm_args.options = jvm_options.get(); @@ -407,7 +407,7 @@ Status JniUtil::Init() { RETURN_IF_ERROR(LibJVMLoader::instance().load()); // Get the JNIEnv* corresponding to current thread. - JNIEnv* env; + JNIEnv* env = nullptr; RETURN_IF_ERROR(JniUtil::GetJNIEnv(&env)); if (env == NULL) return Status::InternalError("Failed to get/create JVM"); diff --git a/be/src/vec/aggregate_functions/aggregate_function_java_udaf.h b/be/src/vec/aggregate_functions/aggregate_function_java_udaf.h index 4ef64aae558c3b..7a367623eaf197 100644 --- a/be/src/vec/aggregate_functions/aggregate_function_java_udaf.h +++ b/be/src/vec/aggregate_functions/aggregate_function_java_udaf.h @@ -60,7 +60,7 @@ struct AggregateJavaUdafData { AggregateJavaUdafData(int64_t num_args) { argument_size = num_args; } ~AggregateJavaUdafData() { - JNIEnv* env; + JNIEnv* env = nullptr; if (!JniUtil::GetJNIEnv(&env).ok()) { LOG(WARNING) << "Failed to get JNIEnv"; }