Pull Request on 2026年08月23日

dotnet/runtimeにマージされたPull RequestをAIで日本語要約

注意点

このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。



#130696 Fix concurrent Reflection.Emit TypeLoadException (#129230)

  • 作成者: @steveisok
  • 作成日時: 2026年07月14日 16:21:24(UTC)
  • マージ日時: 2026年08月23日 15:08:39(UTC)
  • ラベル: area-VM-coreclr

概要

PR #125536で追加されたメタデータ更新により、Reflection.Emitパスにおいてプロパティ/イベント親ルックアップテーブルへの追加が重複するようになった問題を修正します。この重複により、並行読み取り時にルックアップテーブルが不正な状態となり、TypeLoadExceptionが発生していました。本PRでは重複した追加処理を削除し、ルックアップテーブルの更新をCMiniMdRW::AddPropertyToPropertyMap/AddEventToEventMapの単一の場所に統一します。

変更内容

  • src/coreclr/md/compiler/emit.cpp: DefineProperty内の冗長なプロパティ親ルックアップテーブル追加処理を削除
  • src/coreclr/md/compiler/regmeta_emit.cpp: _DefineEvent内の冗長なイベント親ルックアップテーブル追加処理を削除

パフォーマンスへの影響

影響なし(重複していた処理の削除のため、むしろパフォーマンス低下は解消)

関連Issue

#129230 #125534

その他

PR #125536の修正により、ENC/ホットリロードパスではプロパティ/イベント親ルックアップテーブルが正しく更新されるようになりましたが、既存のReflection.Emitパスが同じテーブルに対して重複した追加を行っていました。並行リーダーがルックアップマップを構築した場合、この重複によってマップのCountとメンバーRIDがずれ、その後に発行されたメンバーが誤った親typedefに記録されていました。本修正により、ルックアップテーブルはAddPropertyToPropertyMap/AddEventToEventMapの単一の場所でのみ保持されるようになり、Emit・ENC/ホットリロード両方のパスをサポートしながら並行アクセス時の問題を解決します。


目次