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  }