C26115
Предупреждение C26115: Не удалось освободить блокировку <блокировка> в функции <функция>.
Синтаксическое выделение области блокировки между парными 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);
}