Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
C26165
Collapse the table of content
Expand the table of content

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:
© 2015 Microsoft