富士通

NetCOBOL 技術情報:トラブルシューティング

エラー

Windows x86

NetCOBOL

Q

アプリケーション実行時に次のような現象が発生することがあります。

  • 「~.DLLの初期化に失敗しました。」というメッセージボックスが出力される。
  • プログラムの呼び出しに失敗し、「システムエラー 1114」が通知される。
  • ODBC機能を使用している場合に「システムエラー 1114」を示すSQLMSGが通知される。

A

Windowsシステムには、TLS(スレッドローカルストレージ)という資源があり、1プロセス内で確保できる最大数(エントリー数)にOSの定量制限があります。TLSのエントリーを上限まで使いきると、さまざまな現象が発生します。

最も多い現象は、DLLがプロセス空間にロードされるタイミングにおいて、DLLの初期化に失敗してしまうというものです。
これは、プロセス内でTLSエントリーをほぼ上限まで使い切っている状態で、さらに、DLLの初期化処理でTLSエントリーの確保を行おうとして失敗した場合に発生します。
特に1プロセスが多数のDLLで構成されていて、一つのDLLが一つのTLSエントリーを消費する構造になっている場合、DLL数分のTLSエントリーが消費されるため簡単に定量制限を超えてしまいますので、注意が必要です。

参考
各システムのTLSエントリー数の上限は以下のとおりです。

システム名 TLSエントリー数の上限
Windows NT 4.0 SP6a 64
Windows 2000 1088

このようにWindows NT 4.0では上限に達する可能性が高いため、場合によっては、TLSエントリー数が多いシステムへの移行を検討する必要があります。