| Index: base/logging.cc
|
| diff --git a/base/logging.cc b/base/logging.cc
|
| index 16cd2f8b26d32f406e75b9c04c632674ce1ce708..e836092e76657df2e66349b624441a399cf7c0cc 100644
|
| --- a/base/logging.cc
|
| +++ b/base/logging.cc
|
| @@ -152,14 +152,6 @@ uint64 TickCount() {
|
| #endif
|
| }
|
|
|
| -void CloseFile(FileHandle log) {
|
| -#if defined(OS_WIN)
|
| - CloseHandle(log);
|
| -#else
|
| - fclose(log);
|
| -#endif
|
| -}
|
| -
|
| void DeleteFilePath(const PathString& log_name) {
|
| #if defined(OS_WIN)
|
| DeleteFile(log_name.c_str());
|
| @@ -341,6 +333,22 @@ bool InitializeLogFileHandle() {
|
| return true;
|
| }
|
|
|
| +void CloseFile(FileHandle log) {
|
| +#if defined(OS_WIN)
|
| + CloseHandle(log);
|
| +#else
|
| + fclose(log);
|
| +#endif
|
| +}
|
| +
|
| +void CloseLogFileUnlocked() {
|
| + if (!log_file)
|
| + return;
|
| +
|
| + CloseFile(log_file);
|
| + log_file = NULL;
|
| +}
|
| +
|
| } // namespace
|
|
|
| LoggingSettings::LoggingSettings()
|
| @@ -373,23 +381,19 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) {
|
| &min_log_level);
|
| }
|
|
|
| - LoggingLock::Init(settings.lock_log, settings.log_file);
|
| -
|
| - LoggingLock logging_lock;
|
| -
|
| - if (log_file) {
|
| - // calling InitLogging twice or after some log call has already opened the
|
| - // default log file will re-initialize to the new options
|
| - CloseFile(log_file);
|
| - log_file = NULL;
|
| - }
|
| -
|
| logging_destination = settings.logging_dest;
|
|
|
| // ignore file options unless logging to file is set.
|
| if ((logging_destination & LOG_TO_FILE) == 0)
|
| return true;
|
|
|
| + LoggingLock::Init(settings.lock_log, settings.log_file);
|
| + LoggingLock logging_lock;
|
| +
|
| + // Calling InitLogging twice or after some log call has already opened the
|
| + // default log file will re-initialize to the new options.
|
| + CloseLogFileUnlocked();
|
| +
|
| if (!log_file_name)
|
| log_file_name = new PathString();
|
| *log_file_name = settings.log_file;
|
| @@ -608,16 +612,16 @@ LogMessage::~LogMessage() {
|
| fflush(stderr);
|
| }
|
|
|
| - // We can have multiple threads and/or processes, so try to prevent them
|
| - // from clobbering each other's writes.
|
| - // If the client app did not call InitLogging, and the lock has not
|
| - // been created do it now. We do this on demand, but if two threads try
|
| - // to do this at the same time, there will be a race condition to create
|
| - // the lock. This is why InitLogging should be called from the main
|
| - // thread at the beginning of execution.
|
| - LoggingLock::Init(LOCK_LOG_FILE, NULL);
|
| // write to log file
|
| if ((logging_destination & LOG_TO_FILE) != 0) {
|
| + // We can have multiple threads and/or processes, so try to prevent them
|
| + // from clobbering each other's writes.
|
| + // If the client app did not call InitLogging, and the lock has not
|
| + // been created do it now. We do this on demand, but if two threads try
|
| + // to do this at the same time, there will be a race condition to create
|
| + // the lock. This is why InitLogging should be called from the main
|
| + // thread at the beginning of execution.
|
| + LoggingLock::Init(LOCK_LOG_FILE, NULL);
|
| LoggingLock logging_lock;
|
| if (InitializeLogFileHandle()) {
|
| #if defined(OS_WIN)
|
| @@ -810,12 +814,7 @@ ErrnoLogMessage::~ErrnoLogMessage() {
|
|
|
| void CloseLogFile() {
|
| LoggingLock logging_lock;
|
| -
|
| - if (!log_file)
|
| - return;
|
| -
|
| - CloseFile(log_file);
|
| - log_file = NULL;
|
| + CloseLogFileUnlocked();
|
| }
|
|
|
| void RawLog(int level, const char* message) {
|
|
|