Condividi tramite


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

L'esempio seguente genera l'avviso C26111 perché la _Requires_lock_not_held_ precondizione viene violata dalla chiamata a DoNotLock all'interno della sezione bloccata.

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