C26160
Visual Studio 2015
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at C26160.
warning C26160: Caller possibly failing to hold lock <lock> before calling function <func>.
Warning C26160 resembles warning C26110 except that the confidence level is lower. For example, the function may contain annotation errors.
The following code generates warning C26160.
struct Account { _Guarded_by_(cs) int balance; CRITICAL_SECTION cs; _No_competing_thread_ void Init() { balance = 0; // OK } _Requires_lock_held_(this->cs) void FuncNeedsLock(); _No_competing_thread_ void FuncInitCallOk() // this annotation requires this function is called // single-threaded, therefore we don't need to worry // about the lock { FuncNeedsLock(); // OK, single threaded } void FuncInitCallBad() // No annotation provided, analyzer generates warning { FuncNeedsLock(); // Warning C26160 } };
The following code shows a solution to the previous example.
struct Account { _Guarded_by_(cs) int balance; CRITICAL_SECTION cs; _No_competing_thread_ void Init() { balance = 0; // OK } _Requires_lock_held_(this->cs) void FuncNeedsLock(); _No_competing_thread_ void FuncInitCallOk() // this annotation requires this function is called // single-threaded, therefore we don't need to worry // about the lock { FuncNeedsLock(); // OK, single threaded } void FuncInitCallBadFixed() // this function now properly acquires (and releases) the lock { EnterCriticalSection(&this->cs);FuncNeedsLock();LeaveCriticalSection(&this->cs); } };
Show: