Compartir a través de


Advertencia C26111

El autor de la llamada no puede liberar el bloqueo "lock" antes de llamar a la función "func".

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

Ejemplo

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

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