C26165

 

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 C26165.

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.

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

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

Show: