github.com/amarpal/go-tools@v0.0.0-20240422043104-40142f59f616/staticcheck/sa2001/testdata/src/example.com/CheckEmptyCriticalSection/CheckEmptyCriticalSection.go (about)

     1  package pkg
     2  
     3  import "sync"
     4  
     5  func fn1() {
     6  	var x sync.Mutex
     7  	x.Lock()
     8  	x.Unlock() //@ diag(`empty critical section`)
     9  }
    10  
    11  func fn2() {
    12  	x := struct {
    13  		m1 struct {
    14  			m2 sync.Mutex
    15  		}
    16  	}{}
    17  
    18  	x.m1.m2.Lock()
    19  	x.m1.m2.Unlock() //@ diag(`empty critical section`)
    20  }
    21  
    22  func fn3() {
    23  	var x sync.RWMutex
    24  	x.Lock()
    25  	x.Unlock() //@ diag(`empty critical section`)
    26  
    27  	x.RLock()
    28  	x.RUnlock() //@ diag(`empty critical section`)
    29  
    30  	x.Lock()
    31  	defer x.Unlock()
    32  }
    33  
    34  func fn4() {
    35  	x := struct {
    36  		m func() *sync.Mutex
    37  	}{
    38  		m: func() *sync.Mutex {
    39  			return new(sync.Mutex)
    40  		},
    41  	}
    42  
    43  	x.m().Lock()
    44  	x.m().Unlock() //@ diag(`empty critical section`)
    45  }
    46  
    47  func fn5() {
    48  	i := 0
    49  	var x sync.Mutex
    50  	x.Lock()
    51  	i++
    52  	x.Unlock()
    53  }
    54  
    55  func fn6() {
    56  	x := &sync.Mutex{}
    57  	x.Lock()
    58  	x.Unlock() //@ diag(`empty critical section`)
    59  }
    60  
    61  func fn7() {
    62  	x := &struct {
    63  		sync.Mutex
    64  	}{}
    65  
    66  	x.Lock()
    67  	x.Unlock() //@ diag(`empty critical section`)
    68  }
    69  
    70  func fn8() {
    71  	var x sync.Locker
    72  	x = new(sync.Mutex)
    73  
    74  	x.Lock()
    75  	x.Unlock() //@ diag(`empty critical section`)
    76  }
    77  
    78  func fn9() {
    79  	x := &struct {
    80  		sync.Locker
    81  	}{&sync.Mutex{}}
    82  	x.Lock()
    83  	x.Unlock() //@ diag(`empty critical section`)
    84  }
    85  
    86  type T struct{}
    87  
    88  func (T) Lock() int { return 0 }
    89  func (T) Unlock()   {}
    90  
    91  func fn10() {
    92  	var t T
    93  	t.Lock()
    94  	t.Unlock()
    95  }