From 80d620de70f9f32aee978aa88ff8f1f7ec0d37c5 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Wed, 2 Aug 2017 18:30:16 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=9C=A8=E7=BA=BFexprid2region=5Fid?= =?UTF-8?q?=E5=91=BD=E4=B8=AD=E5=A4=A7=E9=87=8F=E7=9B=B8=E5=90=8C=E7=9A=84?= =?UTF-8?q?district=EF=BC=8C=E5=AF=BC=E8=87=B4=E9=94=81=E5=86=B2=E7=AA=81?= =?UTF-8?q?=EF=BC=8C=E5=B0=86group=E4=B8=AD=E7=9A=84=E4=BA=92=E6=96=A5?= =?UTF-8?q?=E9=94=81=E6=94=B9=E4=B8=BA=E8=AF=BB=E5=86=99=E9=94=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entry/Maat_api.cpp | 4 ++-- src/entry/Maat_rule.cpp | 18 +++++++++--------- src/entry/Maat_rule_internal.h | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/entry/Maat_api.cpp b/src/entry/Maat_api.cpp index 0e10c92..a6dc98c 100644 --- a/src/entry/Maat_api.cpp +++ b/src/entry/Maat_api.cpp @@ -188,7 +188,7 @@ int exprid2region_id(struct _Maat_group_rule_t* group_rule,int expr_id,int* dist int i=0,region_id=-1; struct _Maat_region_rule_t* region_rule=NULL; assert(group_rule->group_id>=0); - pthread_mutex_lock(&(group_rule->mutex)); + pthread_rwlock_rdlock(&(group_rule->rwlock)); for(i=0;iregion_boundary;i++) { region_rule=(struct _Maat_region_rule_t*)dynamic_array_read(group_rule->region_rules, i); @@ -202,7 +202,7 @@ int exprid2region_id(struct _Maat_group_rule_t* group_rule,int expr_id,int* dist *district_id=region_rule->district_id; } } - pthread_mutex_unlock(&(group_rule->mutex)); + pthread_rwlock_unlock(&(group_rule->rwlock)); return region_id; } int match_district(struct _OUTER_scan_status_t *_mid,scan_result_t *region_hit,int region_hit_num) diff --git a/src/entry/Maat_rule.cpp b/src/entry/Maat_rule.cpp index 3caecac..dd9afb8 100644 --- a/src/entry/Maat_rule.cpp +++ b/src/entry/Maat_rule.cpp @@ -28,7 +28,7 @@ #include "mesa_fuzzy.h" #include "great_index_engine.h" -int MAAT_FRAME_VERSION_1_9_20170626=1; +int MAAT_FRAME_VERSION_1_9_20170802=1; const char *maat_module="MAAT Frame"; const char* CHARSET_STRING[]={"NONE","gbk","big5","unicode","utf8","bin", @@ -630,7 +630,7 @@ struct _Maat_group_rule_t* create_group_rule(int group_id) group->ref_cnt=0; group->region_rules=dynamic_array_create(1,8); group->compile_shortcut=NULL; - pthread_mutex_init(&(group->mutex), NULL); + pthread_rwlock_init(&(group->rwlock), NULL); return group; } void destroy_group_rule(struct _Maat_group_rule_t* group) @@ -647,7 +647,7 @@ void destroy_group_rule(struct _Maat_group_rule_t* group) group->region_rules=NULL; group->ref_cnt=0; group->group_id=-1; - pthread_mutex_destroy(&(group->mutex)); + pthread_rwlock_destroy(&(group->rwlock)); free(group); } @@ -1299,31 +1299,31 @@ struct _Maat_group_rule_t* add_region_to_group(struct _Maat_group_rule_t* group, region_rule->expr_id=expr_id; region_rule->district_id=district_id; region_rule->region_type=region_type; - pthread_mutex_lock(&(group->mutex)); + pthread_rwlock_wrlock(&(group->rwlock)); dynamic_array_write(group->region_rules,group->region_boundary,region_rule); group->region_cnt++; group->region_boundary++; - pthread_mutex_unlock(&(group->mutex)); + pthread_rwlock_unlock(&(group->rwlock)); 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)); + pthread_rwlock_wrlock(&(group->rwlock)); group->region_boundary--; region_rule=(struct _Maat_region_rule_t*)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--; - pthread_mutex_unlock(&(group->mutex)); + pthread_rwlock_unlock(&(group->rwlock)); 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; struct _Maat_region_rule_t* region_rule=NULL; - pthread_mutex_lock(&(group->mutex)); + pthread_rwlock_wrlock(&(group->rwlock)); for(i=0;iregion_boundary;i++) { region_rule=(struct _Maat_region_rule_t*)dynamic_array_read(group->region_rules, i); @@ -1344,7 +1344,7 @@ unsigned int del_region_from_group(struct _Maat_group_rule_t* group,int region_i group->region_cnt--; } } - pthread_mutex_unlock(&(group->mutex)); + pthread_rwlock_unlock(&(group->rwlock)); return j; } diff --git a/src/entry/Maat_rule_internal.h b/src/entry/Maat_rule_internal.h index d2e3e22..272a68a 100644 --- a/src/entry/Maat_rule_internal.h +++ b/src/entry/Maat_rule_internal.h @@ -189,7 +189,7 @@ struct _Maat_group_rule_t int ref_cnt; dynamic_array_t *region_rules; void* compile_shortcut; - pthread_mutex_t mutex; + pthread_mutex_t rwlock; }; struct _Maat_compile_rule_t { From ac0dae3b03675213495a7b3cff7af9adaf77161b Mon Sep 17 00:00:00 2001 From: zhengchao Date: Wed, 2 Aug 2017 18:32:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AC=94=E8=AF=AF?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entry/Maat_rule_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/entry/Maat_rule_internal.h b/src/entry/Maat_rule_internal.h index 272a68a..10334eb 100644 --- a/src/entry/Maat_rule_internal.h +++ b/src/entry/Maat_rule_internal.h @@ -189,7 +189,7 @@ struct _Maat_group_rule_t int ref_cnt; dynamic_array_t *region_rules; void* compile_shortcut; - pthread_mutex_t rwlock; + pthread_rwlock_t rwlock; }; struct _Maat_compile_rule_t { From d9af8ba6ff64a074f89aeab5a7dd679f90e715f3 Mon Sep 17 00:00:00 2001 From: zhengchao Date: Thu, 3 Aug 2017 18:37:33 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E3=80=90=E9=87=8D=E8=A6=81Bug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E3=80=91=E5=BB=B6=E8=BF=9F=E5=88=A0=E9=99=A4=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=E4=B8=8ERulescan=E5=BB=B6=E8=BF=9F=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=E5=8F=91=E7=94=9F=E5=86=B2=E7=AA=81=E3=80=82?= =?UTF-8?q?=E5=BD=93=E4=B8=A4=E6=AC=A1=E5=88=A0=E9=99=A4=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E9=97=B4=E9=9A=94=E5=B0=8F=E4=BA=8Erulescan?= =?UTF-8?q?=E5=BB=B6=E8=BF=9F=E6=9B=B4=E6=96=B0=E6=97=B6=E9=97=B4=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E4=BC=9A=E5=AF=BC=E8=87=B4=E6=89=AB=E6=8F=8F=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E8=AE=BF=E9=97=AE=E5=B7=B2=E9=87=8A=E6=94=BE=E7=9A=84?= =?UTF-8?q?group=5Frule=EF=BC=8C=E8=BD=BB=E5=88=99=E5=B4=A9=E6=BA=83?= =?UTF-8?q?=EF=BC=8C=E9=87=8D=E5=88=99=E6=80=9D=E7=B4=A2=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/entry/Maat_rule.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/entry/Maat_rule.cpp b/src/entry/Maat_rule.cpp index dd9afb8..2c5d9d3 100644 --- a/src/entry/Maat_rule.cpp +++ b/src/entry/Maat_rule.cpp @@ -2623,7 +2623,7 @@ void garbage_bagging(enum maat_garbage_type type,void *p,MESA_lqueue_head garbag MESA_lqueue_join_tail(garbage_q,&bag,sizeof(void*)); return; } -void garbage_bury(MESA_lqueue_head garbage_q,void *logger) +void garbage_bury(MESA_lqueue_head garbage_q,int timeout,void *logger) { MESA_queue_errno_t q_ret=MESA_QUEUE_RET_OK; _maat_garbage_t* bag=NULL; @@ -2638,7 +2638,7 @@ void garbage_bury(MESA_lqueue_head garbage_q,void *logger) data_size=sizeof(void*); q_ret=(MESA_queue_errno_t)MESA_lqueue_get_head(garbage_q,&bag,&data_size); assert(data_size==sizeof(void*)&&q_ret==MESA_QUEUE_RET_OK); - if(now-bag->create_time<10) + if(now-bag->create_timescanner->version,feather->scanner->cfg_num); } } - garbage_bury(feather->garbage_q,feather->logger); + garbage_bury(feather->garbage_q,feather->effect_interval_ms/1000+10,feather->logger); if(feather->stat_on==1&&scan_dir_cnt%2==0)//output every 2 seconds { maat_stat_output(feather); @@ -3051,7 +3051,7 @@ void *thread_rule_monitor(void *arg) MESA_htable_destroy(feather->map_tablename2id,free); destroy_maat_scanner(feather->scanner); - garbage_bury(feather->garbage_q,feather->logger); + garbage_bury(feather->garbage_q,feather->effect_interval_ms/1000+10,feather->logger); MESA_lqueue_destroy(feather->garbage_q,lqueue_destroy_cb,NULL); FS_stop(&(feather->stat_handle));