Partilhar via


Aviso C26115

Falha ao liberar bloqueio 'lock' na função 'func'.

A imposição de pares de bloqueio com escopo sintaticamente adquirido e de liberação de bloqueio em programas C/C++ não é executada pela linguagem. Uma função pode introduzir um efeito colateral de bloqueio fazendo uma modificação observável no estado de simultaneidade. Por exemplo, uma função wrapper de bloqueio incrementa o número de aquisições de bloqueio, ou contagem de bloqueios, para um determinado bloqueio.

Você pode anotar uma função que tem um efeito colateral de uma aquisição ou liberação de bloqueio usando _Acquires_lock_ ou _Releases_lock_, respectivamente. Sem essas anotações, espera-se que uma função não altere nenhuma contagem de bloqueios após o retorno. Se as aquisições e lançamentos não forem equilibradas, elas são consideradas órfãs. O aviso C26115 é emitido quando uma função introduz um bloqueio órfão.

Exemplo

O exemplo a seguir gera o aviso C26115 porque há um bloqueio órfão em uma função que não é anotada com _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);
}