C26165

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 C26165: Possibly failing to release lock <lock> in function <func>.

Warning C26165 resembles warning C26115 except that the confidence level is lower. For example, the function may contain annotation errors.

Example

The following code generates warning C26165.

  
_Create_lock_level_(LockLevelOne);   
_Create_lock_level_(LockLevelTwo);   
  
struct LockLevelledStruct  
{  
    _Has_lock_level_(LockLevelOne) CRITICAL_SECTION a;  
    _Has_lock_level_(LockLevelTwo) CRITICAL_SECTION b;  
};  
  
_Lock_level_order_(LockLevelOne, LockLevelTwo);  
  
_Acquires_lock_(s->b) void GetLockFunc(LockLevelledStruct* s)  
{  
    EnterCriticalSection(&s->b);  
}  
  
void testLockLevelledStruct(LockLevelledStruct* s) // Warning C26165  
{  
    EnterCriticalSection(&s->a);   
    GetLockFunc(s);  
    LeaveCriticalSection(&s->a);  
}  
  

Example

To correct this warning, change the previous example to the following.

  
_Create_lock_level_(LockLevelOne);   
_Create_lock_level_(LockLevelTwo);   
  
struct LockLevelledStruct  
{  
    _Has_lock_level_(LockLevelOne) CRITICAL_SECTION a;  
    _Has_lock_level_(LockLevelTwo) CRITICAL_SECTION b;  
};  
  
_Lock_level_order_(LockLevelOne, LockLevelTwo);  
  
_Acquires_lock_(s->b) void GetLockFunc(LockLevelledStruct* s)  
{  
    EnterCriticalSection(&s->b);  
}  
  
_Releases_lock_(s->b) void ReleaseLockFunc(LockLevelledStruct* s)  
{  
    LeaveCriticalSection(&s->b);  
}  
  
void testLockLevelledStruct(LockLevelledStruct* s) // OK  
{  
    EnterCriticalSection(&s->a);   
    GetLockFunc(s);  
    ReleaseLockFunc(s);  
    LeaveCriticalSection(&s->a);  
}