From dfb201220c034fde00a242d0533bef3f73b2907d Mon Sep 17 00:00:00 2001 From: Simon Rutishauser Date: Tue, 13 Oct 2015 07:33:58 +0200 Subject: [PATCH] Make miniglog threadsafe on non-windows system by using localtime_r() instead of localtime() for time formatting Change-Id: Ib8006c685cd8ed4f374893bef56c4061ca2c9747 --- internal/ceres/miniglog/glog/logging.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/internal/ceres/miniglog/glog/logging.h b/internal/ceres/miniglog/glog/logging.h index f2c2ff47c..0fdf38247 100644 --- a/internal/ceres/miniglog/glog/logging.h +++ b/internal/ceres/miniglog/glog/logging.h @@ -229,14 +229,13 @@ class CERES_EXPORT MessageLogger { time_t rawtime; time (&rawtime); - struct tm* timeinfo; + struct tm timeinfo; #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) // On Windows, use secure localtime_s not localtime. - struct tm windows_timeinfo; - timeinfo = &windows_timeinfo; - localtime_s(timeinfo, &rawtime); + localtime_s(&timeinfo, &rawtime); #else - timeinfo = localtime(&rawtime); + // On non-Windows systems, use threadsafe localtime_r not localtime. + localtime_r(&rawtime, &timeinfo); #endif std::set::iterator iter; @@ -244,7 +243,7 @@ class CERES_EXPORT MessageLogger { for (iter = google::log_sinks_global.begin(); iter != google::log_sinks_global.end(); ++iter) { (*iter)->send(severity, file_.c_str(), filename_only_.c_str(), line_, - timeinfo, stream_.str().c_str(), stream_.str().size()); + &timeinfo, stream_.str().c_str(), stream_.str().size()); } }