C26111

Advertencia C26111: Error del llamador al desbloquear <bloqueo> antes de llamar a la función <función>.

La anotación _Requires_lock_not_held_ impone la condición previa de que el recuento de bloqueo para el bloqueo especificado no puede ser mayor que cero cuando se llama a la función.Se produce la advertencia C26111 cuando una función no libera el bloqueo antes de llamar a otra función.

Ejemplo

El ejemplo siguiente genera la advertencia C26111 porque se infringe la condición previa _Requires_lock_not_held_ mediante la llamada a DoNotLock dentro de la sección bloqueada.

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