From f149505a40e33d2790a96c587ec6eb828fc3e74f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=9F=E5=AE=89?= Date: Tue, 29 Dec 2015 10:44:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=BA=86common.c=E4=B8=AD?= =?UTF-8?q?=E5=AF=B9=E6=97=A5=E5=BF=97=E6=B6=88=E6=81=AF=E9=98=9F=E5=88=97?= =?UTF-8?q?=E7=9A=84=E6=93=8D=E4=BD=9C=EF=BC=8C=E5=85=B6=E4=B8=AD=E5=8C=85?= =?UTF-8?q?=E6=8B=AC=EF=BC=9A=E4=BA=A4=E6=8D=A2log=5Fprepare=E4=B8=8Elog?= =?UTF-8?q?=5Fwriting>=E9=98=9F=E5=88=97=E6=8C=87=E9=92=88=E7=9A=84bug?= =?UTF-8?q?=EF=BC=9B=E4=BB=A5=E5=8F=8A=E5=9C=A8=E5=86=99=E5=85=A5log=5Fpre?= =?UTF-8?q?pare=E9=98=9F=E5=88=97=E6=97=B6=E6=9C=AA=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=B7=B2=E5=86=99=E5=85=A5=E6=B6=88=E6=81=AF=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=A4=A7=E4=BA=8E=E9=98=9F=E5=88=97=E9=95=BF=E5=BA=A6=E7=9A=84?= =?UTF-8?q?b=20ug=E3=80=82=E4=BF=AE=E6=AD=A3=E4=BA=86log=5Fpath(=E5=8D=B3?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6=E5=90=8D=EF=BC=89=E4=B8=8D?= =?UTF-8?q?=E4=BC=9A=E9=9A=8F=E6=97=B6=E9=97=B4=E6=94=B9=E5=8F=98=E7=9A=84?= =?UTF-8?q?bug=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/README | 4 ++++ src/sys_nicmonitor/README | 4 ++++ src/sys_nicmonitor/common.c | 41 ++++++++++++++++++++++---------- src/sys_nicmonitor/mnic.c | 4 +++- src/sys_nicmonitor/nicinfo_shm.c | 11 +++++---- src/sys_nicmonitor/version.h | 4 ++-- 6 files changed, 48 insertions(+), 20 deletions(-) diff --git a/src/README b/src/README index 0e4df39..5c04966 100644 --- a/src/README +++ b/src/README @@ -1,3 +1,7 @@ +--V1.14 -- +2015-12-29 +修正了common.c中对日志消息队列的操作,其中包括:交换log_prepare与log_writing>队列指针的bug;以及在写入log_prepare队列时未检查已写入消息是否大于队列长度的b +ug。修正了log_path(即日志文件名)不会随时间改变的bug。 --V1.13 -- 2015-12-23 修正在记录日志中检查目录时(在函数create_dir中),由于采用线程进行日志记录,多次调用get_nic_info可能会导致的将日志文件路径名变错的问题。在get_nic_info中判断log_path是否被初始化过,如过未初始化,则到共享内存中读取。否则,为初始化过,直接使用该值,并在create_dir中使用局部变量保存该值,在create_dir中使用操作该局部变量,而不去改变该全局变量的值。 diff --git a/src/sys_nicmonitor/README b/src/sys_nicmonitor/README index 0e4df39..5c04966 100644 --- a/src/sys_nicmonitor/README +++ b/src/sys_nicmonitor/README @@ -1,3 +1,7 @@ +--V1.14 -- +2015-12-29 +修正了common.c中对日志消息队列的操作,其中包括:交换log_prepare与log_writing>队列指针的bug;以及在写入log_prepare队列时未检查已写入消息是否大于队列长度的b +ug。修正了log_path(即日志文件名)不会随时间改变的bug。 --V1.13 -- 2015-12-23 修正在记录日志中检查目录时(在函数create_dir中),由于采用线程进行日志记录,多次调用get_nic_info可能会导致的将日志文件路径名变错的问题。在get_nic_info中判断log_path是否被初始化过,如过未初始化,则到共享内存中读取。否则,为初始化过,直接使用该值,并在create_dir中使用局部变量保存该值,在create_dir中使用操作该局部变量,而不去改变该全局变量的值。 diff --git a/src/sys_nicmonitor/common.c b/src/sys_nicmonitor/common.c index d7cecfd..e2e9a7d 100644 --- a/src/sys_nicmonitor/common.c +++ b/src/sys_nicmonitor/common.c @@ -46,25 +46,34 @@ static void *record_log_thread( void *arg ) FILE *log_fp = NULL; char **tmp = NULL; int i = 0; + LOGPATH_LOCK; + strcpy(tmp_path,log_path); + LOGPATH_UNLOCK; - create_dir( log_path ); +// create_dir( log_path ); + create_dir( tmp_path ); log_thread_exit = 0; // log_fp = fopen(log_path, "a"); - + while( !log_thread_exit ) { + LOGPATH_LOCK; + strcpy(tmp_path,log_path); + LOGPATH_UNLOCK; if( !log_fp ) { - LOGPATH_LOCK; - log_fp = fopen(log_path, "a"); - LOGPATH_UNLOCK; +// LOGPATH_LOCK; +// log_fp = fopen(log_path, "a"); + log_fp = fopen(tmp_path, "a"); +// LOGPATH_UNLOCK; } //prepare log strings LOG_LOCK; tmp = log_writing; log_writing = log_prepare; - log_prepare = log_writing; + // log_prepare = log_writing; + log_prepare = tmp; log_idx=0; LOG_UNLOCK; @@ -77,7 +86,8 @@ static void *record_log_thread( void *arg ) } if( log_fp ) { - fwrite( log_str, 1, strlen(log_str), log_fp ); //write to file +// fwrite( log_str, 1, strlen(log_str), log_fp ); //write to file + fwrite( log_str, strlen(log_str), 1, log_fp ); } free( log_str ); //free @@ -151,13 +161,18 @@ void record_log(char *str) pthread_create( &pid, NULL, record_log_thread, (void *)NULL ); } - keepstr = strdup( log_str ); - LOG_LOCK; - if( log_prepare ) { - log_prepare[log_idx] = keepstr; - log_idx++; - } + if(log_idx < MAX_LOG_COUNT){ + keepstr = strdup( log_str ); + if(!keepstr){ + LOG_UNLOCK; + return; + } + //LOG_LOCK; + if( log_prepare ) { + log_prepare[log_idx] = keepstr; + log_idx++; + } LOG_UNLOCK; } diff --git a/src/sys_nicmonitor/mnic.c b/src/sys_nicmonitor/mnic.c index ba6ace7..12c5b8d 100644 --- a/src/sys_nicmonitor/mnic.c +++ b/src/sys_nicmonitor/mnic.c @@ -986,11 +986,13 @@ static void *create_logfile(void *ptr) close(fd); } umask(mask_tmp); + strcpy(del_file[head++], log_path); LOGPATH_UNLOCK; old_mon = tmptr.tm_mon+1; old_day = tmptr.tm_mday; - strcpy(del_file[head++], log_path); + // strcpy(del_file[head++], log_path); + if(head == DAYS){ head = 0; del_flag = 1; diff --git a/src/sys_nicmonitor/nicinfo_shm.c b/src/sys_nicmonitor/nicinfo_shm.c index 297ccec..2009e69 100644 --- a/src/sys_nicmonitor/nicinfo_shm.c +++ b/src/sys_nicmonitor/nicinfo_shm.c @@ -328,14 +328,17 @@ int get_nic_info(char *nic_name, NETCARD_INFO *net_info) closedir(dir); #endif + memset(buf, 0, sizeof(buf)); + strftime(buf, sizeof(buf), "%Y%m%d_", &tmptr); + strcat(buf, "sys_nicmonitor.log"); + + LOGPATH_LOCK; s = strrchr(log_path, '/'); s++; *s = '\0'; - memset(buf, 0, sizeof(buf)); - strftime(buf, sizeof(buf), "%Y%m%d_", &tmptr); - strcat(buf, "sys_nicmonitor"); - strcat(buf, ".log"); strcat(log_path, buf); + LOGPATH_UNLOCK; + if((ret = init_nic_info()) == -1){ return -1; } diff --git a/src/sys_nicmonitor/version.h b/src/sys_nicmonitor/version.h index d3c5107..7f7620d 100644 --- a/src/sys_nicmonitor/version.h +++ b/src/sys_nicmonitor/version.h @@ -1,5 +1,5 @@ -// version=1.13 +// version=1.14 #ifndef MNIC_VERSION - #define MNIC_VERSION "1.13" + #define MNIC_VERSION "1.14" #endif