This analysis could be extended - if a call to a releaser (function that calls lock_release) dominates an acquirer, then we have a problem.
Currently the analysis only looks at direct calls to release and acquire, but it could be extended to look at this in a more general way - treat calls to acquirers and releasers the same as the calls to the functions themselves.
This extension would then give us things like:
some_acquire_wrapper();
lock_release(&lock);
The reason this is different to the call order analysis is that call order looks only at the call graph - can a function that calls release then end up calling a function that calls acquire (irrespective of the orderings)? This analysis looks at control flow rather than call flow - different things.
This analysis could be extended - if a call to a releaser (function that calls
lock_release
) dominates an acquirer, then we have a problem.Currently the analysis only looks at direct calls to release and acquire, but it could be extended to look at this in a more general way - treat calls to acquirers and releasers the same as the calls to the functions themselves.
This extension would then give us things like:
The reason this is different to the call order analysis is that call order looks only at the call graph - can a function that calls release then end up calling a function that calls acquire (irrespective of the orderings)? This analysis looks at control flow rather than call flow - different things.