C26165
Visual Studio 2012
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); }