Merge branch 'master' into release-0-4-0
This commit is contained in:
commit
460ec1f564
@ -1,5 +1,5 @@
|
|||||||
[](https://travis-ci.org/google/glog/builds)
|
[](https://travis-ci.org/google/glog/builds)
|
||||||
[](https://ci.appveyor.com/project/google/glog/history)
|
[](https://ci.appveyor.com/project/google-admin/glog/history)
|
||||||
|
|
||||||
This repository contains a C++ implementation of the Google logging
|
This repository contains a C++ implementation of the Google logging
|
||||||
module. Documentation for the implementation is in doc/.
|
module. Documentation for the implementation is in doc/.
|
||||||
|
|||||||
@ -175,11 +175,6 @@ GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity,
|
|||||||
const char* format, ...)
|
const char* format, ...)
|
||||||
@ac_cv___attribute___printf_4_5@;
|
@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@
|
@ac_google_end_namespace@
|
||||||
|
|
||||||
#endif // BASE_RAW_LOGGING_H_
|
#endif // BASE_RAW_LOGGING_H_
|
||||||
|
|||||||
@ -1266,7 +1266,6 @@ void LogMessage::Init(const char* file,
|
|||||||
data_->timestamp_ = static_cast<time_t>(now);
|
data_->timestamp_ = static_cast<time_t>(now);
|
||||||
localtime_r(&data_->timestamp_, &data_->tm_time_);
|
localtime_r(&data_->timestamp_, &data_->tm_time_);
|
||||||
int usecs = static_cast<int>((now - data_->timestamp_) * 1000000);
|
int usecs = static_cast<int>((now - data_->timestamp_) * 1000000);
|
||||||
RawLog__SetLastTime(data_->tm_time_, usecs);
|
|
||||||
|
|
||||||
data_->num_chars_to_log_ = 0;
|
data_->num_chars_to_log_ = 0;
|
||||||
data_->num_chars_to_syslog_ = 0;
|
data_->num_chars_to_syslog_ = 0;
|
||||||
|
|||||||
@ -572,9 +572,10 @@ void TestDCHECK() {
|
|||||||
DCHECK_GT(2, 1);
|
DCHECK_GT(2, 1);
|
||||||
DCHECK_LT(1, 2);
|
DCHECK_LT(1, 2);
|
||||||
|
|
||||||
auto_ptr<int64> sptr(new int64);
|
int64* orig_ptr = new int64;
|
||||||
int64* ptr = DCHECK_NOTNULL(sptr.get());
|
int64* ptr = DCHECK_NOTNULL(orig_ptr);
|
||||||
CHECK_EQ(ptr, sptr.get());
|
CHECK_EQ(ptr, orig_ptr);
|
||||||
|
delete orig_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestSTREQ() {
|
void TestSTREQ() {
|
||||||
|
|||||||
@ -68,17 +68,6 @@
|
|||||||
|
|
||||||
_START_GOOGLE_NAMESPACE_
|
_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
|
// CAVEAT: vsnprintf called from *DoRawLog below has some (exotic) code paths
|
||||||
// that invoke malloc() and getenv() that might acquire some locks.
|
// that invoke malloc() and getenv() that might acquire some locks.
|
||||||
// If this becomes a problem we should reimplement a subset of vsnprintf
|
// 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
|
return; // this stderr log message is suppressed
|
||||||
}
|
}
|
||||||
// can't call localtime_r here: it can allocate
|
// can't call localtime_r here: it can allocate
|
||||||
struct ::tm& t = last_tm_time_for_raw_log;
|
|
||||||
char buffer[kLogBufSize];
|
char buffer[kLogBufSize];
|
||||||
char* buf = buffer;
|
char* buf = buffer;
|
||||||
int size = sizeof(buffer);
|
int size = sizeof(buffer);
|
||||||
|
|
||||||
// NOTE: this format should match the specification in base/logging.h
|
// 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],
|
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<unsigned int>(GetTID()),
|
static_cast<unsigned int>(GetTID()),
|
||||||
const_basename(const_cast<char *>(file)), line);
|
const_basename(const_cast<char *>(file)), line);
|
||||||
|
|
||||||
|
|||||||
@ -180,6 +180,15 @@ static void ATTRIBUTE_NOINLINE CheckStackTrace1(int i) {
|
|||||||
CheckStackTrace2(j);
|
CheckStackTrace2(j);
|
||||||
DECLARE_ADDRESS_LABEL(end);
|
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) {
|
void ATTRIBUTE_NOINLINE CheckStackTrace(int i) {
|
||||||
INIT_ADDRESS_RANGE(CheckStackTrace, start, end, &expected_range[5]);
|
INIT_ADDRESS_RANGE(CheckStackTrace, start, end, &expected_range[5]);
|
||||||
DECLARE_ADDRESS_LABEL(start);
|
DECLARE_ADDRESS_LABEL(start);
|
||||||
|
|||||||
@ -179,11 +179,6 @@ GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity,
|
|||||||
const char* format, ...)
|
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_
|
#endif // BASE_RAW_LOGGING_H_
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user