From f6249e31ddcaf8d1bc6b875c58167658a3449262 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Wed, 24 May 2017 13:55:35 +0800 Subject: [PATCH] =?UTF-8?q?add=5Fexpr=5Frule=E7=9A=84=E5=8E=BB=E9=87=8D?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=9B=9E=E7=BB=88=E6=AD=A2=E5=9C=A8?= =?UTF-8?q?grouprule=E4=B8=AD=E8=AE=B0=E5=BD=95=E7=9A=84expr=5Fid=E7=9A=84?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=EF=BC=8C=E5=AF=BC=E8=87=B4delete=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=88=A0=E9=99=A4=E6=9C=AA=E5=9C=A8rulescan=E4=B8=AD?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E7=9A=84expr=5Fid=EF=BC=8C=E5=91=BD=E4=B8=AD?= =?UTF-8?q?batchupdate=E4=B8=AD=E7=9A=84assert=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entry/Maat_rule.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/entry/Maat_rule.cpp b/src/entry/Maat_rule.cpp index 6d05d59..1c95651 100644 --- a/src/entry/Maat_rule.cpp +++ b/src/entry/Maat_rule.cpp @@ -1306,6 +1306,19 @@ struct _Maat_group_rule_t* add_region_to_group(struct _Maat_group_rule_t* group, pthread_mutex_unlock(&(group->mutex)); return group; } +void cancel_last_region_from_group(struct _Maat_group_rule_t* group,int region_id,int expr_id) +{ + struct _Maat_region_rule_t* region_rule=NULL; + pthread_mutex_lock(&(group->mutex)); + region_rule=dynamic_array_read(group->region_rules,group->region_boundary); + assert(region_rule->expr_id==expr_id&®ion_rule->region_id==region_id); + free(region_rule); + dynamic_array_write(group->region_rules,group->region_boundary,NULL); + group->region_cnt--; + group->region_boundary--; + pthread_mutex_unlock(&(group->mutex)); + return; +} unsigned int del_region_from_group(struct _Maat_group_rule_t* group,int region_id,unsigned int *output_expr_id,int output_size) { int i=0,j=0; @@ -1691,6 +1704,7 @@ int add_expr_rule(struct _Maat_table_info_t* table,struct db_str_rule_t* db_rule op_expr->convert_failed>0) { scanner->dedup_expr_num++; + cancel_last_region_from_group(group_rule,db_rule->region_id,op_expr->p_expr->expr_id); destroy_op_expr(op_expr); op_expr=NULL; }