Compartir a través de


C26111

advertencia C26111: El llamador no libera el bloqueo <lock> antes de llamar a la función <func>.

La anotación _Requires_lock_not_held_ impone la precondición 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 precondición _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);
}