fix load data file reader memory leak

This commit is contained in:
hnwyllmm 2024-08-12 09:41:53 +00:00 committed by ob-robot
parent 8c0c36c10a
commit 66938d14e8
4 changed files with 18 additions and 4 deletions

View File

@ -466,7 +466,7 @@ ObLoadDataDirectImpl::DataReader::DataReader()
ObLoadDataDirectImpl::DataReader::~DataReader()
{
if (OB_NOT_NULL(file_reader_)) {
file_reader_->~ObFileReader();
ObFileReader::destroy(file_reader_);
file_reader_ = nullptr;
}
}
@ -502,7 +502,10 @@ int ObLoadDataDirectImpl::DataReader::init(const DataAccessParam &data_access_pa
file_read_param.filename_ = data_desc.filename_;
file_read_param.compression_format_ = data_access_param.compression_format_;
file_read_param.access_info_ = data_access_param.access_info_;
file_read_param.packet_handle_ = &execute_ctx.exec_ctx_.get_session_info()->get_pl_query_sender()->get_packet_sender();
file_read_param.packet_handle_ = nullptr;
if (OB_NOT_NULL(execute_ctx.exec_ctx_.get_session_info()) && OB_NOT_NULL(execute_ctx.exec_ctx_.get_session_info()->get_pl_query_sender())) {
file_read_param.packet_handle_ = &execute_ctx.exec_ctx_.get_session_info()->get_pl_query_sender()->get_packet_sender();
}
file_read_param.session_ = execute_ctx.exec_ctx_.get_session_info();
file_read_param.timeout_ts_ = THIS_WORKER.get_timeout_ts();

View File

@ -132,6 +132,13 @@ int ObFileReader::open(const ObFileReadParam &param, ObIAllocator &allocator, Ob
return ret;
}
void ObFileReader::destroy(ObFileReader *file_reader)
{
if (OB_NOT_NULL(file_reader)) {
OB_DELETE(ObFileReader, MEMORY_ATTR, file_reader);
}
}
int ObFileReader::open_decompress_reader(const ObFileReadParam &param,
ObIAllocator &allocator,
ObFileReader *source_reader,

View File

@ -92,6 +92,7 @@ public:
* A file reader factory
*/
static int open(const ObFileReadParam &param, ObIAllocator &allocator, ObFileReader *& file_reader);
static void destroy(ObFileReader *file_reader);
private:
static int open_decompress_reader(const ObFileReadParam &param,

View File

@ -2468,7 +2468,7 @@ int ObLoadDataSPImpl::ToolBox::release_resources()
//release file reader
if (OB_NOT_NULL(file_reader)) {
file_reader->~ObFileReader();
ObFileReader::destroy(file_reader);
file_reader = NULL;
}
@ -2776,7 +2776,10 @@ int ObLoadDataSPImpl::ToolBox::init(ObExecContext &ctx, ObLoadDataStmt &load_stm
file_read_param.filename_ = load_args.file_name_;
file_read_param.compression_format_ = load_args.compression_format_;
file_read_param.access_info_ = load_args.access_info_;
file_read_param.packet_handle_ = &ctx.get_my_session()->get_pl_query_sender()->get_packet_sender();
file_read_param.packet_handle_ = nullptr;
if (OB_NOT_NULL(ctx.get_my_session()) && OB_NOT_NULL(ctx.get_my_session()->get_pl_query_sender())) {
file_read_param.packet_handle_ = &ctx.get_my_session()->get_pl_query_sender()->get_packet_sender();
}
file_read_param.session_ = ctx.get_my_session();
file_read_param.timeout_ts_ = THIS_WORKER.get_timeout_ts();