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