Поделиться через


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