Partilhar via


Advertência C26115

Não foi possível libertar o bloqueio 'lock' na função 'func'.

Observações

A imposição de pares de bloqueio bloqueio e desbloqueio com escopo sintático em programas C/C++ não é realizada 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 envoltória de bloqueio incrementa o número de aquisições de bloqueio, ou contagem de bloqueio, para um bloqueio específico.

Você pode anotar uma função que tenha 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 modifique a contagem de bloqueios depois que ela retorna. Se as aquisições e lançamentos não estiverem equilibrados, são considerados órfãos. O aviso C26115 é emitido quando uma função introduz um bloqueio órfão.

Example

O exemplo a seguir gera a advertência C26115 porque há um bloqueio órfão numa função que não está marcada 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);
}