From 425d338743bb2ff990e3282d3e4b7d73335bd6c5 Mon Sep 17 00:00:00 2001 From: chenpu <1102509144@163.com> Date: Tue, 2 Apr 2024 22:11:26 +0800 Subject: [PATCH] Do not acquire lock for file.Sync() fsync call --- klog.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/klog.go b/klog.go index 026be9e3..23f92e33 100644 --- a/klog.go +++ b/klog.go @@ -1223,11 +1223,14 @@ func StartFlushDaemon(interval time.Duration) { // lockAndFlushAll is like flushAll but locks l.mu first. func (l *loggingT) lockAndFlushAll() { l.mu.Lock() + // Write the klog buffer into the kernel buffer l.flushAll() l.mu.Unlock() + // Write the kernel buffer to disk + l.syncAll() } -// flushAll flushes all the logs and attempts to "sync" their data to disk. +// FlushAll flushes all the logs // l.mu is held. func (l *loggingT) flushAll() { // Flush from fatal down, in case there's trouble flushing. @@ -1235,7 +1238,6 @@ func (l *loggingT) flushAll() { file := l.file[s] if file != nil { _ = file.Flush() // ignore error - _ = file.Sync() // ignore error } } if logging.loggerOptions.flush != nil { @@ -1243,6 +1245,17 @@ func (l *loggingT) flushAll() { } } +// Attempts to "sync" their data to disk. +func (l *loggingT) syncAll() { + // Sync from fatal down + for s := severity.FatalLog; s >= severity.InfoLog; s-- { + file := l.file[s] + if file != nil { + _ = file.Sync() // ignore error + } + } +} + // CopyStandardLogTo arranges for messages written to the Go "log" package's // default logs to also appear in the Google logs for the named and lower // severities. Subsequent changes to the standard log's default output location