Udostępnij za pośrednictwem


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);
    }