Fixed crazy looping

This commit is contained in:
obscuren 2014-07-05 13:24:26 +02:00
parent 90eb4f1939
commit 329887df99
1 changed files with 14 additions and 6 deletions

View File

@ -39,7 +39,7 @@ func (msg *logMessage) send(logger LogSystem) {
var logMessages chan (*logMessage)
var logSystems []LogSystem
var drained = true
var quit chan bool
type LogLevel uint8
@ -54,6 +54,7 @@ const (
// log messages are dispatched to log writers
func start() {
out:
for {
select {
case msg := <-logMessages:
@ -62,15 +63,23 @@ func start() {
msg.send(logSystem)
}
}
default:
drained = true
case <-quit:
break out
}
}
}
// waits until log messages are drained (dispatched to log writers)
func Flush() {
for !drained {
quit <- true
done:
for {
select {
case <-logMessages:
default:
break done
}
}
}
@ -88,6 +97,7 @@ func AddLogSystem(logSystem LogSystem) {
defer mutex.Unlock()
if logSystems == nil {
logMessages = make(chan *logMessage)
quit = make(chan bool)
go start()
}
logSystems = append(logSystems, logSystem)
@ -96,7 +106,6 @@ func AddLogSystem(logSystem LogSystem) {
func (logger *Logger) sendln(level LogLevel, v ...interface{}) {
if logMessages != nil {
msg := newPrintlnLogMessage(level, logger.tag, v...)
drained = false
logMessages <- msg
}
}
@ -104,7 +113,6 @@ func (logger *Logger) sendln(level LogLevel, v ...interface{}) {
func (logger *Logger) sendf(level LogLevel, format string, v ...interface{}) {
if logMessages != nil {
msg := newPrintfLogMessage(level, logger.tag, format, v...)
drained = false
logMessages <- msg
}
}