C26115

警告 C26115: 関数 <func> でロック <ロック> の解放が失敗します。

C/C++ プログラムでは、構文的にスコープが設定されたロックの取得 とロックの解放 のペアの適用は、言語では実行されません。 関数は、コンカレンシーの状態を監視可能な方法で変更することにより、ロックの副作用が発生することがあります。 たとえば、ロックのラッパー関数により、特定のロックに関するロック取得数 (ロック数) が増えます。

_Acquires_lock_ を使用してロックの取得による副作用がある関数に注釈を付けたり、_Releases_lock_ を使用してロックの解放による副作用がある関数に注釈を付けたりできます。 このような注釈がない場合、返されたロック数が関数によって変更されないようにする必要があります。 取得と解放のバランスが取れていない場合は、孤立 していると見なされます。 警告 C26115 は、関数に孤立したロックがあると発行されます。

次の例では、_Acquires_lock_ の注釈が付けられていない関数に孤立したロックがあるため、警告 C26115 が生成されます。

typedef struct _DATA
{
    CRITICAL_SECTION cs;
} DATA;

void FailToReleaseLock(int flag, DATA* p)
{
    EnterCriticalSection(&p->cs);

    if (flag)
        return; // Warning C26115

    LeaveCriticalSection(&p->cs);
}