Avertissement C26115
Échec de la libération du verrou « lock » dans la fonction « func ».
L’application des paires d’acquisitions et de mise en production de verrous de portée syntactique dans les programmes C/C++ n’est pas effectuée par le langage. Une fonction peut introduire un effet secondaire de verrouillage en apportant une modification observable à l’état d’accès concurrentiel. Par exemple, une fonction wrapper de verrou incrémente le nombre d’acquisitions de verrous ou le nombre de verrous pour un verrou donné.
Vous pouvez annoter une fonction qui a un effet secondaire à partir d’une libération de verrou ou d’acquisition de verrou à l’aide _Acquires_lock_
ou _Releases_lock_
, respectivement. Sans ces annotations, une fonction est censée ne pas modifier le nombre de verrous après son retour. Si les acquisitions et versions ne sont pas équilibrées, elles sont considérées comme orphelines. Avertissement C26115 est émis lorsqu’une fonction introduit un verrou orphelin.
Exemple
L’exemple suivant génère l’avertissement C26115, car il existe un verrou orphelin dans une fonction qui n’est pas annotée avec _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);
}