Предупреждение C26115

Не удалось освободить блокировку "lock" в функции Func.

Принудительное применение синтаксически область заблокированных пар получения и блокировки в программах 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);
}