Make miniglog threadsafe on non-windows system by using localtime_r() instead of localtime() for time formatting Change-Id: Ib8006c685cd8ed4f374893bef56c4061ca2c9747
diff --git a/internal/ceres/miniglog/glog/logging.h b/internal/ceres/miniglog/glog/logging.h index f2c2ff4..0fdf382 100644 --- a/internal/ceres/miniglog/glog/logging.h +++ b/internal/ceres/miniglog/glog/logging.h
@@ -229,14 +229,13 @@ 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<google::LogSink*>::iterator iter; @@ -244,7 +243,7 @@ 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()); } }