Condividi tramite


C26111

avviso C26111: Il Chiamante non riesce a rilasciare il blocco <lock> prima di chiamare la funzione <func>.

L'annotazione _Requires_lock_not_held_ impone una precondizione, che il conteggio dei blocchi per il blocco specificato non può essere maggiore di zero, quando viene chiamata la funzione.L'avviso C26111 viene generato quando una funzione non riesce a rilasciare il blocco, prima di chiamare un'altra funzione.

Esempio

Nell'esempio seguente viene generato l'avviso C26111 perché la precondizione _Requires_lock_not_held_ viene violata dalla chiamata DoNotLock all'interno della sezione di blocco.

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