C26112
предупреждение 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);
}