1 void _spin_lock(int name);
   2 void _spin_unlock(int name);
   3 int _spin_trylock(int name);
   4 
   5 int a;
   6 int b;
   7 int func (void)
   8 {
   9         int mylock = 1;
  10         int mylock2 = 1;
  11         int mylock3 = 1;
  12 
  13         if (!_spin_trylock(mylock)) {
  14                 return;
  15         }
  16 
  17         _spin_unlock(mylock);
  18         _spin_unlock(mylock2);
  19 
  20         if (a)
  21                 _spin_unlock(mylock);
  22         _spin_lock(mylock2);
  23 
  24         if (!_spin_trylock(mylock3))
  25                 return;
  26         return;
  27 }
  28 /*
  29  * check-name: Smatch locking #2
  30  * check-command: smatch --project=kernel sm_locking2.c
  31  *
  32  * check-output-start
  33 sm_locking2.c:21 func() error: double unlock 'spin_lock:mylock'
  34 sm_locking2.c:26 func() warn: inconsistent returns 'spin_lock:mylock3'.
  35   Locked on:   line 26
  36   Unlocked on: line 14
  37                line 25
  38  * check-output-end
  39  */