C26160

Note

This article applies to Visual Studio 2015. If you're looking for the latest Visual Studio documentation, see Visual Studio documentation. We recommend upgrading to the latest version of Visual Studio. Download it here

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.

Example

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  
    }  
  
};  

Example

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);  
    }  
};