github.com/kayoticsully/syncthing@v0.8.9-0.20140724133906-c45a2fdc03f8/cmd/syncthing/locktrace.go (about) 1 // Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file). 2 // All rights reserved. Use of this source code is governed by an MIT-style 3 // license that can be found in the LICENSE file. 4 5 //+build locktrace 6 7 package main 8 9 import ( 10 "log" 11 "path" 12 "runtime" 13 "time" 14 ) 15 16 var ( 17 lockTime time.Time 18 ) 19 20 func (m *Model) Lock() { 21 _, file, line, _ := runtime.Caller(1) 22 log.Printf("%s:%d: Lock()...", path.Base(file), line) 23 blockTime := time.Now() 24 m.RWMutex.Lock() 25 lockTime = time.Now() 26 log.Printf("%s:%d: ...Lock() [%.04f ms]", path.Base(file), line, time.Since(blockTime).Seconds()*1000) 27 } 28 29 func (m *Model) Unlock() { 30 _, file, line, _ := runtime.Caller(1) 31 m.RWMutex.Unlock() 32 log.Printf("%s:%d: Unlock() [%.04f ms]", path.Base(file), line, time.Since(lockTime).Seconds()*1000) 33 } 34 35 func (m *Model) RLock() { 36 _, file, line, _ := runtime.Caller(1) 37 log.Printf("%s:%d: RLock()...", path.Base(file), line) 38 blockTime := time.Now() 39 m.RWMutex.RLock() 40 log.Printf("%s:%d: ...RLock() [%.04f ms]", path.Base(file), line, time.Since(blockTime).Seconds()*1000) 41 } 42 43 func (m *Model) RUnlock() { 44 _, file, line, _ := runtime.Caller(1) 45 m.RWMutex.RUnlock() 46 log.Printf("%s:%d: RUnlock()", path.Base(file), line) 47 }