From 8b9bdfd333496bd7221d34505ca2db77b8503c5e Mon Sep 17 00:00:00 2001 From: yuqing Date: Fri, 15 May 2015 11:16:14 +0800 Subject: [PATCH] logger.c call log_check_rotate in lock --- HISTORY | 3 ++- src/logger.c | 51 +++++++++++++++------------------------------------ src/logger.h | 3 +++ 3 files changed, 20 insertions(+), 37 deletions(-) diff --git a/HISTORY b/HISTORY index 7147b84..ace4beb 100644 --- a/HISTORY +++ b/HISTORY @@ -1,9 +1,10 @@ -Version 1.14 2015-05-12 +Version 1.14 2015-05-15 * fast_task_info support set_buffer_size and realloc_buffer * use file lock when write logger header * bugfixed: sockopt.c correct fsbytes to sbytes in FreeBSD * macro FDFS_WRITE_BUFF_SIZE change to FAST_WRITE_BUFF_SIZE + * logger.c call log_check_rotate in lock Version 1.13 2015-02-27 * support php extension diff --git a/src/logger.c b/src/logger.c index 82b3e91..bf65f80 100644 --- a/src/logger.c +++ b/src/logger.c @@ -542,10 +542,8 @@ int log_rotate(LogContext *pContext) return log_open(pContext); } -static int log_check_rotate(LogContext *pContext, const bool bNeedLock) +static int log_check_rotate(LogContext *pContext) { - int result; - if (pContext->log_fd == STDERR_FILENO) { if (pContext->current_size > 0) @@ -555,27 +553,13 @@ static int log_check_rotate(LogContext *pContext, const bool bNeedLock) return ENOENT; } - if (bNeedLock) - { - pthread_mutex_lock(&(pContext->log_thread_lock)); - } - if (pContext->rotate_immediately) { - result = log_rotate(pContext); pContext->rotate_immediately = false; - } - else - { - result = 0; + return log_rotate(pContext); } - if (bNeedLock) - { - pthread_mutex_unlock(&(pContext->log_thread_lock)); - } - - return result; + return 0; } static int log_fsync(LogContext *pContext, const bool bNeedLock) @@ -593,7 +577,16 @@ static int log_fsync(LogContext *pContext, const bool bNeedLock) } else { - return log_check_rotate(pContext, bNeedLock); + if (bNeedLock) + { + pthread_mutex_lock(&(pContext->log_thread_lock)); + } + result = log_check_rotate(pContext); + if (bNeedLock) + { + pthread_mutex_unlock(&(pContext->log_thread_lock)); + } + return result; } } @@ -612,7 +605,7 @@ static int log_fsync(LogContext *pContext, const bool bNeedLock) if (pContext->current_size > pContext->rotate_size) { pContext->rotate_immediately = true; - log_check_rotate(pContext, false); + log_check_rotate(pContext); } } @@ -630,23 +623,9 @@ static int log_fsync(LogContext *pContext, const bool bNeedLock) break; } - /* - if (pContext->log_fd != STDERR_FILENO) - { - if (fsync(pContext->log_fd) != 0) - { - result = errno != 0 ? errno : EIO; - fprintf(stderr, "file: "__FILE__", line: %d, " \ - "call fsync fail, errno: %d, error info: %s\n",\ - __LINE__, result, STRERROR(result)); - break; - } - } - */ - if (pContext->rotate_immediately) { - result = log_check_rotate(pContext, false); + result = log_check_rotate(pContext); } } while (0); diff --git a/src/logger.h b/src/logger.h index 7b1b462..4491fee 100644 --- a/src/logger.h +++ b/src/logger.h @@ -115,6 +115,9 @@ int log_init2(); #define log_take_over_stderr() log_take_over_stderr_ex(&g_log_context) #define log_take_over_stdout() log_take_over_stdout_ex(&g_log_context) +#define log_header(pContext, header, header_len) \ + log_it_ex2(pContext, NULL, header, header_len, false, false) + #define log_destroy() log_destroy_ex(&g_log_context) /** init function, use stderr for output by default