Compartir a través de


C26115

advertencia C26115: Error al liberar el bloqueo <lock> en la función <func>.

El ámbito de cumplimiento del bloqueo sintáctico adquirir y bloquear liberar en pares en programas de C/C++ no lo realiza el lenguaje.Una función puede producir un efecto secundario de bloqueo creando una modificación observable en el estado de simultaneidad.Por ejemplo, una función contenedora de bloqueo, aumenta el número de adquisiciones de bloqueo, o el recuento de bloqueo, para un bloqueo determinado.

Se puede anotar una función que tenga un efecto secundario de un bloqueo adquirido o un bloqueo liberado mediante _Acquires_lock_ o _Releases_lock_, respectivamente.Sin estas anotaciones, se espera que una función no cambie ningún recuento de bloqueos después de que retorne.Si adquirir y liberar no estan equilibrados, se consideran huérfanos.Se emite la advertencia C26115 cuando una función presenta un bloqueo huérfano.

Ejemplo

El siguiente ejemplo genera la advertencia C26115, porque hay un bloqueo huérfano en una función que no se observa con _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);
    }