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

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

Заметка _Requires_no_locks_held_ накладывает предварительные условия, что вызывающий объект не должен держать блокировку во время вызова функции. Предупреждение C26112 выдается, когда функция не может освободить все блокировки перед вызовом другой функции.

Пример

В следующем примере создается предупреждение C26112, так как _Requires_no_locks_held_ предварительные условия нарушаются вызовом NoLocksAllowed в заблокированном разделе.

typedef struct _DATA
{
    CRITICAL_SECTION cs;
} DATA;

_Requires_no_locks_held_

void NoLocksAllowed(DATA* p)
{
     // Lock sensitive operations here
}

void LocksHeldFunction(DATA* p)
{
    EnterCriticalSection(&p->cs);
    NoLocksAllowed(p); // Warning C26112
    LeaveCriticalSection(&p->cs);
}