循環言語フォールバックを設定するとStackOverflowExceptionが発生し、アプリケーションのクラッシュが発生する可能性がある


解説

アプリケーションが辞書翻訳中にクラッシュする可能性があります。この問題が発生すると、Windows Applicationイベント ログに下記のようなエントリーが出力されます:

Faulting application name: w3wp.exe, version: X.X.XXXX.XXXX, time stamp: 0x23456789
Faulting module name: clr.dll, version: X.X.XXXX.X, time stamp: 0x12345678
Exception code: 0xc00000fd

この問題は言語フォールバック機能が有効化された状態で、2つ以上の言語が循環言語フォールバック依存関係を形成している際に発生します。循環言語フォールバックの例としては、日本語のフォールバック言語が英語で、英語のフォールバック言語が日本語となっている場合などがこれに該当します。

ソリューションがこの問題の影響を受けているかどうかを確認するには、以下の手順を実施してください:

  1. KB1000546の「メモリ ダンプ ファイルの収集:条件付き」セクション配下の「2. 特定の初回マネージド例外に基づいてメモリ ダンプ ファイルを収集する」を参考に、「StackOverflowException (0xc00000fd」に基づいてメモリダンプ ファイルを収集します。
  2. 影響を受けているスレッドのスタック トレースを調査します。
    問題が発生している場合、スタック トレースには「Sitecore.Globalization.DefaultTranslate.TryTranslateTextByLanguage(string key, DictionaryDomain domain, Language language, out string phrase, params object[] parameters)」メソッドの呼び出しを行う複数の連続したフレームが含まれています。

解決策

この問題を解決するには、以下の手順に従ってください:

(上記のHotfixをインストールせずに)この問題の影響を緩和するには、循環言語フォールバック依存関係を手動で止める必要があります。これは、「/sitecore/system/Languages/」配下の各言語の「Fallback Language」フィールドの値から循環的な依存関係を引き起こしている言語を特定し、必要に応じて1つ以上の言語の「Fallback Language」フィールドの値を変更してください。