view usr/src/tools/smatch/src/validation/sm_locking3.c @ 19430:6e69910f8ded

12257 resync smatch to 0.6.1-rc1-il-4 Reviewed by: Toomas Soome <tsoome@me.com> Reviewed by: Robert Mustacchi <rm@fingolfin.org> Approved by: Dan McDonald <danmcd@joyent.com>
author John Levon <john.levon@joyent.com>
date Wed, 22 Jan 2020 16:05:13 -0800
parents b73b4fe381d3
children
line wrap: on
line source

int _spin_trylock(int name);
void _spin_lock(int name);
void _spin_unlock(int name);

int func (void)
{
	int mylock = 1;

	if (!({frob(); frob(); _spin_trylock(mylock);})) 
		return;

	frob();
	_spin_unlock(mylock);

	if (((_spin_trylock(mylock)?1:0)?1:0))
		return;
	frob_somemore();
	_spin_unlock(mylock);

	return;
}
/*
 * check-name: Smatch locking #3
 * check-command: smatch --project=kernel sm_locking3.c
 *
 * check-output-start
sm_locking3.c:18 func() error: double unlocked 'mylock' (orig line 15)
sm_locking3.c:20 func() warn: inconsistent returns 'mylock'.
  Locked on  : 16
  Unlocked on: 10,20
 * check-output-end
 */