C26115
Ostrzeżenie C26115: niepowodzenie zwolnienia blokady <lock> w funkcji <func>.
Wymuszenie syntaktycznie zakresu blokowania, para nabywania i zwalniania blokady w programach C/C++ nie jest wykonywane przez język.Funkcja może wprowadzić efekt uboczny blokowania poprzez dokonanie dostrzegalnych modyfikacji w stanie współbieżności.Na przykład blokująca funkcja otoka zwiększa liczbę nabytych blokad lub licznik blokad dla danej blokady.
Można dodawać adnotacje do funkcji, która posiada efekt uboczny związany z nabyciem lub zwolnieniem blokady za pomocą odpowiednio _Acquires_lock_ lub _Releases_lock_.Bez takich adnotacji oczekuje się, aby funkcja nie zmieniała żadnych liczników blokad po jej zakończeniu.Jeśli nabycia i zwolnienia nie są zrównoważone, należy rozważyć rozdzielenie.Ostrzeżenie C26115 jest wydawane, gdy funkcja wprowadza blokadę oddzieloną.
Przykład
Poniższy przykład generuje ostrzeżenie C26115, ponieważ oddzielona blokada w funkcji, która nie zawiera adnotacji z _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);
}