Fix FastParserRes memory leak caused by remote plan

This commit is contained in:
lf0 2022-03-17 15:10:54 +08:00 committed by LINxiansheng
parent a5c703acc4
commit 9aa337ba9e
2 changed files with 12 additions and 10 deletions

View File

@ -1071,6 +1071,9 @@ int ObSql::handle_remote_query(const ObRemoteSqlInfo &remote_sql_info, ObSqlCtx
// is recorded on the control server, and there is no need to record it here
// Otherwise it will cause repeated warning messages
ob_reset_tsi_warning_buffer();
if (NULL != pc_ctx) {
pc_ctx->~ObPlanCacheCtx();
}
return ret;
}
@ -1216,12 +1219,8 @@ inline int ObSql::handle_text_query(const ObString &stmt, ObSqlCtx &context, ObR
LOG_WARN("fail to handle after get plan", K(ret));
}
}
// for inner sql, release the optimization memory
if (!THIS_WORKER.has_req_flag()) {
// only for inner sql
if (NULL != pc_ctx) {
pc_ctx->~ObPlanCacheCtx();
}
if (NULL != pc_ctx) {
pc_ctx->~ObPlanCacheCtx();
}
return ret;

View File

@ -385,14 +385,17 @@ struct ObPCParamEqualInfo {
};
struct ObFastParserResult {
private:
common::ModulePageAllocator inner_alloc_;
public:
ObFastParserResult()
: inner_alloc_("FastParserRes"), raw_params_(&inner_alloc_), ps_params_(&inner_alloc_), cache_params_(NULL)
{}
ObPlanCacheKey pc_key_; // plan cache key, parameterized by fast parser
common::ModulePageAllocator inner_alloc_;
common::ObFixedArray<ObPCParam*, common::ObIAllocator> raw_params_;
common::ObFixedArray<const common::ObObjParam*, common::ObIAllocator> ps_params_;
ParamStore* cache_params_;
common::ObFixedArray<ObPCParam *, common::ObIAllocator> raw_params_;
common::ObFixedArray<const common::ObObjParam *, common::ObIAllocator> ps_params_;
ParamStore *cache_params_;
void reset()
{
pc_key_.reset();