diff --git a/daemon/logger/journald/read.go b/daemon/logger/journald/read.go index 541fab7055..f73ab91839 100644 --- a/daemon/logger/journald/read.go +++ b/daemon/logger/journald/read.go @@ -237,7 +237,10 @@ drain: // free(NULL) is safe C.free(unsafe.Pointer(oldCursor)) - C.sd_journal_get_cursor(j, &cursor) + if C.sd_journal_get_cursor(j, &cursor) != 0 { + // ensure that we won't be freeing an address that's invalid + cursor = nil + } return cursor } @@ -272,7 +275,6 @@ func (s *journald) followJournal(logWatcher *logger.LogWatcher, config logger.Re s.readers.mu.Lock() delete(s.readers.readers, logWatcher) s.readers.mu.Unlock() - C.sd_journal_close(j) close(logWatcher.Msg) }() @@ -307,9 +309,9 @@ func (s *journald) readLogs(logWatcher *logger.LogWatcher, config logger.ReadCon following := false defer func(pfollowing *bool) { if !*pfollowing { - C.sd_journal_close(j) close(logWatcher.Msg) } + C.sd_journal_close(j) }(&following) // Remove limits on the size of data items that we'll retrieve. rc = C.sd_journal_set_data_threshold(j, C.size_t(0))