Предупреждение C26111

Вызывающий объект не удалось освободить блокировку блокировки перед вызовом функции Func.

Заметка _Requires_lock_not_held_ накладывает условие, что число блокировок для указанной блокировки не может быть больше нуля при вызове функции. Предупреждение C26111 выдается, когда функция не может освободить блокировку перед вызовом другой функции.

Пример

В следующем примере создается предупреждение C26111, так как _Requires_lock_not_held_ условие нарушается вызовом DoNotLock в заблокированном разделе.

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