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


C26115

предупреждение C26115: Сбой при освобождении блокировки <lock> в функции <func>.

Синтаксическое выделение области блокировки между парными acquire и release в программах C/C++ не требуется.В функции можно добиться эффекта блокировки внесением изменений в состояние параллелизма.Например, функция-оболочка блокировки для данной блокировки увеличивает число захватов блокировки или количество блокировок.

Функцию, которая имеет дело с захватом блокировки или освобождением блокировки, можно аннотировать с помощью _Acquires_lock_ или _Releases_lock_ соответственно.При отсутствии этих аннотаций предполагается, что функция не изменяет количество блокировок после своего завершения.Если захваты и освобождения не сбалансированы, то они считаются осиротевшими.Предупреждение C26115 выводится, когда функция инициирует осиротевшую блокировку.

Пример

Следующий пример приводит к предупреждению C26115, поскольку в нем присутствует осиротевшая блокировка в функции, которая не аннотируется как _Acquires_lock_.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs;
    } DATA;

    void FailToReleaseLock(int flag, DATA* p) 
    {
        EnterCriticalSection(&p->cs); 

        if (flag)
            return; // Warning C26115

        LeaveCriticalSection(&p->cs);
    }