C26165
Visual Studio 2015
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: