In the trace record the time value is generated after acquiring the mutex. The time value is improved when generated before seizing the mutext. --- src/base/logtrace.cc | 2 +- src/base/logtrace_client.cc | 18 +++++++++++++----- src/base/logtrace_client.h | 13 ++++++++++--- 3 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/src/base/logtrace.cc b/src/base/logtrace.cc index 8908c1ff3..9822879ab 100644 --- a/src/base/logtrace.cc +++ b/src/base/logtrace.cc @@ -97,7 +97,7 @@ void trace_output(const char *file, unsigned line, unsigned priority, if (!entry) { entry = gl_local_thread_trace->CreateLogEntry( static_cast<base::LogMessage::Severity>(priority), - preamble, ap); + base::ReadRealtimeClock(), preamble, ap); } gl_thread_buffer.WriteToBuffer(entry); } diff --git a/src/base/logtrace_client.cc b/src/base/logtrace_client.cc index e22112a43..903e239e3 100644 --- a/src/base/logtrace_client.cc +++ b/src/base/logtrace_client.cc @@ -96,19 +96,26 @@ const char* LogTraceClient::Log(LogTraceClient* tracelog, const char* LogTraceClient::Log(base::LogMessage::Severity severity, const char *fmt, va_list ap) { if (log_socket_ != nullptr && log_mutex_ != nullptr) { - return LogInternal(severity, fmt, ap); + return LogInternal(severity, base::ReadRealtimeClock(), fmt, ap); } return nullptr; } const char* LogTraceClient::LogInternal(base::LogMessage::Severity severity, - const char *fmt, va_list ap) { + struct timespec time_spec, const char *fmt, va_list ap) { base::Lock lock(*log_mutex_); - CreateLogEntryInternal(severity, fmt, ap); + CreateLogEntryInternal(severity, time_spec, fmt, ap); log_socket_->Send(buffer_.data(), buffer_.size()); return buffer_.data(); } +const char* LogTraceClient::CreateLogEntry(base::LogMessage::Severity severity, + struct timespec time_spec, const char *fmt, va_list ap) { + base::Lock lock(*log_mutex_); + return CreateLogEntryInternal(severity, time_spec, fmt, ap); +} + +// This is original const char* LogTraceClient::CreateLogEntry(base::LogMessage::Severity severity, const char *fmt, va_list ap) { base::Lock lock(*log_mutex_); @@ -116,12 +123,13 @@ const char* LogTraceClient::CreateLogEntry(base::LogMessage::Severity severity, } const char* LogTraceClient::CreateLogEntryInternal( - base::LogMessage::Severity severity, const char *fmt, va_list ap) { + base::LogMessage::Severity severity, struct timespec time_spec, + const char *fmt, va_list ap) { uint32_t id = sequence_id_; sequence_id_ = id < kMaxSequenceId ? id + 1 : 1; buffer_.clear(); base::LogMessage::Write( - base::LogMessage::Facility::kLocal1, severity, base::ReadRealtimeClock(), + base::LogMessage::Facility::kLocal1, severity, time_spec, fqdn_, app_name_, proc_id_, msg_id_, {{base::LogMessage::SdName{"meta"}, {base::LogMessage::Parameter{base::LogMessage::SdName{"sequenceId"}, diff --git a/src/base/logtrace_client.h b/src/base/logtrace_client.h index 5b165e528..3c264f0b5 100644 --- a/src/base/logtrace_client.h +++ b/src/base/logtrace_client.h @@ -45,6 +45,8 @@ class LogTraceClient { va_list ap); const char* CreateLogEntry(base::LogMessage::Severity severity, const char *fmt, va_list ap); + const char* CreateLogEntry(base::LogMessage::Severity severity, + struct timespec time_spec, const char *fmt, va_list ap); void AddExternalBuffer(int64_t tid, LogTraceBuffer* buffer); void RemoveExternalBuffer(int64_t tid); void RequestFlushExternalBuffer(); @@ -56,10 +58,15 @@ class LogTraceClient { private: bool Init(const char *msg_id, WriteMode mode); - const char* LogInternal(base::LogMessage::Severity severity, const char *fmt, - va_list ap); + + const char* LogInternal(base::LogMessage::Severity severity, + struct timespec time_spec, const char *fmt, va_list ap); const char* CreateLogEntryInternal(base::LogMessage::Severity severity, - const char *fmt, va_list ap); + struct timespec time_spec, const char *fmt, va_list ap); + inline const char* CreateLogEntryInternal( + base::LogMessage::Severity severity, const char *fmt, va_list ap) { + return CreateLogEntryInternal(severity, base::ReadRealtimeClock(), fmt, ap); + } static constexpr const uint32_t kMaxSequenceId = uint32_t{0x7fffffff}; base::LogMessage::HostName fqdn_{""}; base::LogMessage::AppName app_name_{""}; -- 2.17.1 _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel