go-logging icon indicating copy to clipboard operation
go-logging copied to clipboard

backend, logger: lock before reassigning `defaultBackend`

Open Asalle opened this issue 5 years ago • 0 comments

If not locked, this results in race:

  1. SetBackend(), backend.go:26 - reassigning the global variable (write)
func SetBackend(backends ...Backend) LeveledBackend {
	var backend Backend
  // ...

  // DARA RACE START
	defaultBackend = AddModuleLevel(backend)
  // DATA RACE END

	return defaultBackend
}
  1. IsEnabledFor(), logger.go:141 - accessing a default variable (read)
func (l *Logger) IsEnabledFor(level Level) bool {
	return defaultBackend.IsEnabledFor(level, l.Module) // DATA RACE HERE
}

Asalle avatar May 18 '20 09:05 Asalle