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());
}
}