Avertissement C26111

L’appelant n’a pas réussi à libérer le verrou « lock » avant d’appeler la fonction « func ».

L’annotation _Requires_lock_not_held_ impose une condition préalable selon laquelle le nombre de verrous pour le verrou spécifié ne peut pas être supérieur à zéro lorsque la fonction est appelée. Avertissement C26111 est émis lorsqu’une fonction ne parvient pas à libérer le verrou avant d’appeler une autre fonction.

Exemple

L’exemple suivant génère l’avertissement C26111, car la _Requires_lock_not_held_ condition préalable est violée par l’appel à DoNotLock la section verrouillée.

typedef struct _DATA
{
    CRITICAL_SECTION cs;
    int d;
} DATA;

_Requires_lock_not_held_(p->cs)

void DoNotLock(DATA* p)
{
    EnterCriticalSection(&p->cs);
    p->d = 0;
    LeaveCriticalSection(&p->cs);
}

void LockedFunction(DATA* p)
{
    EnterCriticalSection(&p->cs);
    DoNotLock(p); // Warning C26111
    LeaveCriticalSection(&p->cs);
}