C26165
C26165 Uyarı: <lock> Kilidi açmak büyük olasılıkla başarısız işlev <func>.
Uyarı C26165 benzer Uyarı C26115 güvenilirlilik düzeyini daha düşük olmasıdır.Örneğin, işlevin eklenti hataları içerebilir.
Örnek
Aşağıdaki kod, C26165 uyarısına neden olur.
_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);
}
Bu uyarı düzeltmek için önceki örnekte şu şekilde değiştirin.
_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);
}