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