Types of context imbalance warnings and how to annotate


There are three types of context imbalance warnings:

  1. warning: context imbalance – unexpected unlock
  2. warning: context imbalance – wrong count at exit
  3. warning: context imbalance – different lock contexts for basic block

How to annotate

Unexpected unlock

This is the easiest of all, what happens here is that the function enters the critical section at entry without exiting or it can be the function exit the critical section without entering, both ways Sparse will throw a warning. Locking is not balanced, for each entry to the critical section, there should be a corresponding exit from it.

Adding __releases() or __acquires() annotation to the function will generally solve the issue .

Wrong count a exit

This situation generally happens when Sparse gets confused of the logic function. It thinks the function releases the lock at exit when it s still holding the lock or acquires when it releases or finally hold the lock when

Different lock contexts for basic block

This situation happens when the function has many branches or conditions with different locking outcomes. This may be a bug or just a logic that hit the limit of Sparse.

To solve this issue one may consider refactoring the code if necessary.

Please consider that the situation described above are general, this implies that one may encounter more complex situation throwing one of the above warnings.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s