特定のマシンで 24 時間年中無休で実行されるライブラリがあるとします。コードがしっかりしていても、遅かれ早かれハードウェア障害によって例外が発生する可能性があります。このようなイベントに備えて、何らかのフェールセーフを配置したいと考えています。1 つのアプローチは、各 API をカプセル化するラッパー関数を作成することです。
returnCode=DEFAULT;
try
{
returnCode=libraryAPI1();
}
catch(...)
{
returnCode=BAD;
}
return returnCode;
次に、ライブラリの呼び出し元がスレッド全体を再起動し、returnCode が正しくない場合はモジュールを再初期化します。
物事はひどくうまくいかない可能性があります。例えば
try ブロック (または libraryAPI1()) が次の場合:
func1();
char *x=malloc(1000);
func2();
func2() が例外をスローすると、x は決して解放されません。同様に、ファイルの破損も考えられる結果です。
このシナリオで他に何が問題になる可能性があるか教えてください。