C26165

Advertencia C26165: Posiblemente no se pudo liberar el bloqueo <bloqueo> en la función <función>.

La advertencia C26165 se parece a la advertencia C26115 salvo que el nivel de confianza es inferior.Por ejemplo, la función puede contener errores de anotación.

Ejemplo

El código siguiente genera la advertencia 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);
}

Para corregir esta advertencia, cambie el ejemplo anterior por el siguiente.

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