The log package has some benchmarks, maybe make the change and see if it makes a difference.
On Wednesday, 7 September 2016 02:46:09 UTC+10, mwor...@gmail.com wrote: > > Hey, It's commented "release lock while getting caller info - it's > expensive" in source code of /src/log/log.go line:150. > > I'm confused with what makes it expensive if we didn't unlock the l.mu ? > Does goroutines have context ? > > func (l *Logger) Output(calldepth int, s string) error { > now := time.Now() // get this early. > var file string > var line int > l.mu.Lock() > defer l.mu.Unlock() > if l.flag&(Lshortfile|Llongfile) != 0 { > // release lock while getting caller info - it's expensive. > l.mu.Unlock() > var ok bool > _, file, line, ok = runtime.Caller(calldepth) > if !ok { > file = "???" > line = 0 > } > l.mu.Lock() > } > l.buf = l.buf[:0] > l.formatHeader(&l.buf, now, file, line) > l.buf = append(l.buf, s...) > if len(s) == 0 || s[len(s)-1] != '\n' { > l.buf = append(l.buf, '\n') > } > _, err := l.out.Write(l.buf) > return err > } > > AND > > What will happen if I moved the _, file, line, ok = > runtime.Caller(calldepth) like below? Is better than the upper one ? > > func (l *Logger) Output(calldepth int, s string) error { > now := time.Now() // get this early. > var file string > var line int > > //moved here > var ok bool > _, file, line, ok = runtime.Caller(calldepth) > > l.mu.Lock() > defer l.mu.Unlock() > > l.buf = l.buf[:0] > if l.flag&(Lshortfile|Llongfile) != 0 { > if !ok { > file = "???" > line = 0 > } > l.formatHeader(&l.buf, now, file, line) > } > > l.buf = append(l.buf, s...) > if len(s) == 0 || s[len(s)-1] != '\n' { > l.buf = append(l.buf, '\n') > } > _, err := l.out.Write(l.buf) > return err > } > > Thanks for all > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.