diff --git a/README.md b/README.md index d525f30..965766c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Build Status](https://img.shields.io/travis/google/glog/master.svg?label=Travis)](https://travis-ci.org/google/glog/builds) -[![Grunt status](https://img.shields.io/appveyor/ci/google/glog/master.svg?label=Appveyor)](https://ci.appveyor.com/project/google/glog/history) +[![Grunt status](https://img.shields.io/appveyor/ci/google-admin/glog/master.svg?label=Appveyor)](https://ci.appveyor.com/project/google-admin/glog/history) This repository contains a C++ implementation of the Google logging module. Documentation for the implementation is in doc/. diff --git a/src/glog/raw_logging.h.in b/src/glog/raw_logging.h.in index fa17057..3eac56a 100644 --- a/src/glog/raw_logging.h.in +++ b/src/glog/raw_logging.h.in @@ -175,11 +175,6 @@ GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity, const char* format, ...) @ac_cv___attribute___printf_4_5@; -// Hack to propagate time information into this module so that -// this module does not have to directly call localtime_r(), -// which could allocate memory. -GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs); - @ac_google_end_namespace@ #endif // BASE_RAW_LOGGING_H_ diff --git a/src/logging.cc b/src/logging.cc index 18a8ec6..0c86cf6 100644 --- a/src/logging.cc +++ b/src/logging.cc @@ -1266,7 +1266,6 @@ void LogMessage::Init(const char* file, data_->timestamp_ = static_cast(now); localtime_r(&data_->timestamp_, &data_->tm_time_); int usecs = static_cast((now - data_->timestamp_) * 1000000); - RawLog__SetLastTime(data_->tm_time_, usecs); data_->num_chars_to_log_ = 0; data_->num_chars_to_syslog_ = 0; diff --git a/src/logging_unittest.cc b/src/logging_unittest.cc index 8770d52..762c752 100644 --- a/src/logging_unittest.cc +++ b/src/logging_unittest.cc @@ -572,9 +572,10 @@ void TestDCHECK() { DCHECK_GT(2, 1); DCHECK_LT(1, 2); - auto_ptr sptr(new int64); - int64* ptr = DCHECK_NOTNULL(sptr.get()); - CHECK_EQ(ptr, sptr.get()); + int64* orig_ptr = new int64; + int64* ptr = DCHECK_NOTNULL(orig_ptr); + CHECK_EQ(ptr, orig_ptr); + delete orig_ptr; } void TestSTREQ() { diff --git a/src/raw_logging.cc b/src/raw_logging.cc index 7a7409b..3bbfda3 100644 --- a/src/raw_logging.cc +++ b/src/raw_logging.cc @@ -68,17 +68,6 @@ _START_GOOGLE_NAMESPACE_ -// Data for RawLog__ below. We simply pick up the latest -// time data created by a normal log message to avoid calling -// localtime_r which can allocate memory. -static struct ::tm last_tm_time_for_raw_log; -static int last_usecs_for_raw_log; - -void RawLog__SetLastTime(const struct ::tm& t, int usecs) { - memcpy(&last_tm_time_for_raw_log, &t, sizeof(last_tm_time_for_raw_log)); - last_usecs_for_raw_log = usecs; -} - // CAVEAT: vsnprintf called from *DoRawLog below has some (exotic) code paths // that invoke malloc() and getenv() that might acquire some locks. // If this becomes a problem we should reimplement a subset of vsnprintf @@ -120,16 +109,13 @@ void RawLog__(LogSeverity severity, const char* file, int line, return; // this stderr log message is suppressed } // can't call localtime_r here: it can allocate - struct ::tm& t = last_tm_time_for_raw_log; char buffer[kLogBufSize]; char* buf = buffer; int size = sizeof(buffer); // NOTE: this format should match the specification in base/logging.h - DoRawLog(&buf, &size, "%c%02d%02d %02d:%02d:%02d.%06d %5u %s:%d] RAW: ", + DoRawLog(&buf, &size, "%c0000 00:00:00.000000 %5u %s:%d] RAW: ", LogSeverityNames[severity][0], - 1 + t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, - last_usecs_for_raw_log, static_cast(GetTID()), const_basename(const_cast(file)), line); diff --git a/src/stacktrace_unittest.cc b/src/stacktrace_unittest.cc index c6ab638..77d3429 100644 --- a/src/stacktrace_unittest.cc +++ b/src/stacktrace_unittest.cc @@ -180,6 +180,15 @@ static void ATTRIBUTE_NOINLINE CheckStackTrace1(int i) { CheckStackTrace2(j); DECLARE_ADDRESS_LABEL(end); } +#ifndef __GNUC__ +// On non-GNU environment, we use the address of `CheckStackTrace` to +// guess the address range of this function. This guess is wrong for +// non-static function on Windows. This is probably because +// `&CheckStackTrace` returns the address of a trampoline like PLT, +// not the actual address of `CheckStackTrace`. +// See https://github.com/google/glog/issues/421 for the detail. +static +#endif void ATTRIBUTE_NOINLINE CheckStackTrace(int i) { INIT_ADDRESS_RANGE(CheckStackTrace, start, end, &expected_range[5]); DECLARE_ADDRESS_LABEL(start); diff --git a/src/windows/glog/raw_logging.h b/src/windows/glog/raw_logging.h index 4757a71..e0e6d6f 100755 --- a/src/windows/glog/raw_logging.h +++ b/src/windows/glog/raw_logging.h @@ -179,11 +179,6 @@ GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity, const char* format, ...) ; -// Hack to propagate time information into this module so that -// this module does not have to directly call localtime_r(), -// which could allocate memory. -GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs); - } #endif // BASE_RAW_LOGGING_H_