diff --git a/Platform/user/ulog/log-sched/log_pty.c b/Platform/user/ulog/log-sched/log_pty.c index 98df9e640..ccecc193f 100755 --- a/Platform/user/ulog/log-sched/log_pty.c +++ b/Platform/user/ulog/log-sched/log_pty.c @@ -20,20 +20,62 @@ #define LOG_CONF_KEY_PTY_LEVEL_STR "pty.level" #define LOG_CONF_KEY_PTY_MODULE_STR "pty.module" +pthread_mutex_t g_mutex_pty; - -int g_epoll_fd = -1; +volatile int g_epoll_fd = -1; int g_watch_fd = -1; int g_inotify_fd = -1; pthread_t g_monitor_thread; -int access(const char *pathname, int mode); static int write_pty_content(FILE *fp, const u8 level, const char *filter_mod, void *arg); +static ret_code write_pty_conf() +{ + char value_str[128]=""; + uint level = LOG_INFO; + char *module = NULL; + ret_code ret = RET_OK; + + memset(value_str, 0, sizeof(value_str)); + sprintf(value_str, "%s%s", LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME); + if (access(value_str, 0) == 0) + { + /* 获取配置 */ + memset(value_str, 0, sizeof(value_str)); + if (get_log_file_conf(LOG_CONF_KEY_PTY_LEVEL_STR, value_str, sizeof(value_str)) == 0) + { + level = atoi(value_str); + } + + memset(value_str, 0, sizeof(value_str)); + if (get_log_file_conf(LOG_CONF_KEY_PTY_MODULE_STR, value_str, sizeof(value_str)) == 0) + { + module = value_str; + } + + pthread_mutex_lock(&g_mutex_pty); + int ret_conf = log_conf((u8)level, LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME, module, + write_pty_content, NULL); + pthread_mutex_unlock(&g_mutex_pty); + if (ret_conf != 0) + { + ULOG_ERR(g_log, "Log's pty configure which is written is failure"); + ret = RET_ERR; + } + else + { + ULOG_DEBUG(g_log, "Pty config level(%u) and module(%s) successed.", level, module!=NULL?module:"NULL"); + } + } + + return ret; +} + static void *pty_monitor_thread(void *arg) { struct epoll_event events[MAX_EVENT_NUMBER]; int ret; + ret_code ret_c; char buf[MAX_LINE_SZ]; ssize_t len; char *ptr; @@ -82,8 +124,11 @@ static void *pty_monitor_thread(void *arg) sleep(1); ULOG_DEBUG(g_log, "Current ev mask:%u, wo will write configure and restart rsyslog", inotify_ev->mask); - log_conf(LOG_INFO, LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME, NULL, - write_pty_content, NULL); + ret_c = write_pty_conf(); + if (ret_c != RET_OK) { + ULOG_ERR(g_log, "Pty monitor write pty configure is failure(code:%d)", ret_c); + continue; + } if (log_sev_restart() != 0) { ULOG_ERR(g_log, "Pty monitor restart rsyslog 2 is failure"); @@ -233,10 +278,12 @@ static int config_log_pty(const log_pty_t *conf) break; case LOG_ON: - if (log_conf(conf->level, LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME, conf->module, - write_pty_content, NULL) != 0) { + pthread_mutex_lock(&g_mutex_pty); + ret = log_conf(conf->level, LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME, conf->module, + write_pty_content, NULL); + pthread_mutex_unlock(&g_mutex_pty); + if (ret != 0) { ULOG_ERR(g_log, "Log's pty configure which is written is failure"); - ret = -1; } else { ret = 0; } @@ -283,46 +330,30 @@ void rpc_conf_log_pty(rpc_conn *conn, pointer input, int input_len, pointer data ret_code pty_initial() { - char value_str[128]=""; - uint level = 6; - char *module = NULL; - ret_code ret = RET_OK; + int thread_ret = pthread_mutex_init(&g_mutex_pty, NULL); + if (thread_ret != 0) { + ULOG_DEBUG(g_log, "Initiating pthread lock is failure(cdoe:%d)", thread_ret); + } - memset(value_str, 0, sizeof(value_str)); - sprintf(value_str, "%s%s", LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME); - if (access(value_str, 0) == 0) - { - /* 获取配置 */ - memset(value_str, 0, sizeof(value_str)); - if (get_log_file_conf(LOG_CONF_KEY_PTY_LEVEL_STR, value_str, sizeof(value_str)) == 0) - { - level = atoi(value_str); - } - - memset(value_str, 0, sizeof(value_str)); - if (get_log_file_conf(LOG_CONF_KEY_PTY_MODULE_STR, value_str, sizeof(value_str)) == 0) - { - module = value_str; - } - - if (log_conf((u8)level, LOG_CONF_PATH, LOG_CONF_PTY_FILE_NAME, module, - write_pty_content, NULL) != 0) - { - ULOG_ERR(g_log, "Log's pty configure which is written is failure"); - ret = RET_ERR; - } - else - { - ULOG_DEBUG(g_log, "Pty config level(%u) and module(%s) successed.", level, module!=NULL?module:"NULL"); - } - } + ret_code ret = write_pty_conf(); + if (ret != RET_OK) { + ULOG_DEBUG(g_log, "Initiating pty is failure(cdoe:%d)", ret); + } else { + ULOG_INFO(g_log, "Initiating pty is success"); + } return ret; } ret_code pty_exit() { + ret_code ret = RET_OK; + int thread_ret = pthread_mutex_destroy(&g_mutex_pty); + if (0 != thread_ret) { + ret = RET_ERR; + ULOG_DEBUG(g_log, "Destroying pthread lock is failure(cdoe:%d)", thread_ret); + } stop_dev_pty_monitor(); - return RET_OK; + return ret; }