全量更新时,未释放内部的compile和group结构体,导致内存泄漏,影响主版本。

This commit is contained in:
zhengchao
2018-07-05 17:20:49 +08:00
parent e9c1c5e818
commit 04b76488ff

View File

@@ -727,14 +727,8 @@ struct _Maat_group_inner_t* create_group_rule(int group_id)
pthread_mutex_init(&(group->mutex), NULL); pthread_mutex_init(&(group->mutex), NULL);
return group; return group;
} }
void destroy_group_rule(struct _Maat_group_inner_t* group) void force_destroy_group_rule(struct _Maat_group_inner_t* group)
{ {
if(group->ref_cnt>0||group->region_cnt>0)
{
return;
}
dynamic_array_destroy(group->regions,free); dynamic_array_destroy(group->regions,free);
group->region_cnt=0; group->region_cnt=0;
group->region_boundary=0; group->region_boundary=0;
@@ -748,6 +742,15 @@ void destroy_group_rule(struct _Maat_group_inner_t* group)
free(group); free(group);
} }
void destroy_group_rule(struct _Maat_group_inner_t* group)
{
if(group->ref_cnt>0||group->region_cnt>0)
{
return;
}
force_destroy_group_rule(group);
}
void make_group_set(const struct _Maat_compile_inner_t* compile_rule,universal_bool_expr_t* a_set) void make_group_set(const struct _Maat_compile_inner_t* compile_rule,universal_bool_expr_t* a_set)
{ {
int i=0,j=0; int i=0,j=0;
@@ -1069,7 +1072,6 @@ struct _Maat_scanner_t* create_maat_scanner(unsigned int version,_Maat_feather_t
MESA_htable_print_crtl(scanner->compile_hash,0); MESA_htable_print_crtl(scanner->compile_hash,0);
hargs.thread_safe=1; hargs.thread_safe=1;
hargs.data_free=EMPTY_FREE;
scanner->group_hash=MESA_htable_create(&hargs, sizeof(hargs)); scanner->group_hash=MESA_htable_create(&hargs, sizeof(hargs));
MESA_htable_print_crtl(scanner->group_hash,0); MESA_htable_print_crtl(scanner->group_hash,0);
@@ -1152,8 +1154,8 @@ void destroy_maat_scanner(struct _Maat_scanner_t*scanner)
return; return;
} }
rulescan_destroy(scanner->region); rulescan_destroy(scanner->region);
MESA_htable_destroy(scanner->compile_hash,NULL); MESA_htable_destroy(scanner->compile_hash,(void (*)(void*))destroy_compile_rule);
MESA_htable_destroy(scanner->group_hash, NULL); MESA_htable_destroy(scanner->group_hash, (void (*)(void*))force_destroy_group_rule);
MESA_htable_destroy(scanner->region_hash, NULL); MESA_htable_destroy(scanner->region_hash, NULL);
map_destroy(scanner->district_map); map_destroy(scanner->district_map);
scanner->district_map=NULL; scanner->district_map=NULL;
@@ -2636,7 +2638,7 @@ void update_compile_rule(struct _Maat_table_info_t* table,const char* table_line
{ {
struct db_compile_rule_t *p_compile=(struct db_compile_rule_t*)calloc(sizeof(struct db_compile_rule_t ),1); struct db_compile_rule_t *p_compile=(struct db_compile_rule_t*)calloc(sizeof(struct db_compile_rule_t ),1);
struct _head_Maat_rule_t* p_m_rule=&(p_compile->m_rule_head); struct _head_Maat_rule_t* p_m_rule=&(p_compile->m_rule_head);
char user_region[128*2]={0}; char user_region[MAX_TABLE_LINE_SIZE]={0};
int ret=0; int ret=0;
p_compile->declare_grp_num=0; p_compile->declare_grp_num=0;
ret=sscanf(table_line,"%d\t%d\t%hhd\t%hhd\t%hhd\t%lld\t%s\t%d\t%d",&(p_m_rule->config_id) ret=sscanf(table_line,"%d\t%d\t%hhd\t%hhd\t%hhd\t%lld\t%s\t%d\t%d",&(p_m_rule->config_id)