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


C26111

предупреждение C26111: Вызывающей стороне не удается освободить блокировку <lock> до вызова функции <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);
}