Udostępnij za pośrednictwem


C26111

Ostrzeżenie C26111: wywołujący nie był w stanie zwolnić blokady <lock> przed wywołaniem funkcji <func>.

Adnotacja _Requires_lock_not_held_ nakłada warunek, że liczba blokad dla określonej blokady nie może być większa niż zero po wywołaniu funkcji.Ostrzeżenie C26111 jest wydane, gdy funkcji nie powiedzie się zwolnienie blokady przed wywołaniem innej funkcji.

Przykład

Poniższy przykład generuje ostrzeżenie C26111, ponieważ warunek konieczny _Requires_lock_not_held_ jest naruszony przez wywołanie DoNotLock w obrębie zablokowanej sekcji.

typedef struct _DATA 
{
    CRITICAL_SECTION cs;
    int d;
} DATA;

_Requires_lock_not_held_(p->cs) 

void DoNotLock(DATA* p)
{
    EnterCriticalSection(&p->cs); 
    p->d = 0;
    LeaveCriticalSection(&p->cs);
}

void LockedFunction(DATA* p) 
{ 
    EnterCriticalSection(&p->cs); 
    DoNotLock(p); // Warning C26111
    LeaveCriticalSection(&p->cs);
}