Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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.
Examples
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);
}