Pull Request on 2026年08月16日

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

注意点

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



#131867 Fix macOS crash in NetworkChange when the run loop thread already exited

概要

macOS の NetworkChange.StopRunLoop() において、run loop スレッドが既に終了している場合に null ポインタを dereference してクラッシュ(EXC_BAD_ACCESS)する問題を修正します。Release ビルドでは Debug.Assert が削除されるため、s_runLoop が null のまま CFRunLoopIsWaiting() に渡されていました。本修正では、s_runLoop が既に zero の場合に早期リターンすることで、クラッシュを防止します。

実績:この問題により約5週間で13,497件のクラッシュが報告されており、特に長時間稼働するデーモンで NetworkAddressChanged への購読/購読解除を繰り返す場合に発生していました。

変更内容

  • src/libraries/System.Net.NetworkInformation/src/System/Net/NetworkInformation/NetworkAddressChange.OSX.cs
    • StopRunLoop() メソッドに null チェックを追加
    • s_runLoop が IntPtr.Zero の場合、s_runLoopEndedEvent の signal を待機した後に早期リターン(状態マシンの同期を保つ)
    • 既存の Debug.Assert ステートメントを null チェック後に移動(epilogue 実行後は s_runLoopSource と s_dynamicStoreRef も null になるため)

パフォーマンスへの影響

影響なし

関連Issue

#131867

その他

  • 既知の追加課題(この修正スコープ外)
    1. CFRunLoopRun() が早期リターンした場合、NetworkAddressChanged が以後発火しなくなる(サイレントエラー)。リカバリーには動作変更が必要なため、本修正では対象外。
    2. CreateAndStartRunLoop() で SCDynamicStoreCreateRunLoopSource() の戻り値の妥当性チェックが未実装。null 源では CFRunLoopRun() が即座に return し、同じ破損状態に陥る可能性あり。

#130835 Buffer consecutive text nodes when loading XContainer to avoid O(n^2)

  • 作成者: @StephenMolloy
  • 作成日時: 2026年07月16日 02:18:18(UTC)
  • マージ日時: 2026年08月16日 00:17:33(UTC)
  • ラベル: area-System.Xml

概要

XContainer の XML ロード処理における O(n²) パフォーマンス問題を修正しました。XmlReader が単一の論理的なテキスト値を複数の小さな連続したテキストノードとして返す場合(例:DataContractSerializer がストリーム上で読み込む場合)、AddStringSkipNotify による個別の不変文字列連結がボトルネックになっていました。連続するテキストノード(Text/SignificantWhitespace/Whitespace)を StringBuilder にバッファリングし、一度に処理することで線形時間に改善します。

変更内容

  • src/libraries/System.Private.Xml.Linq/src/System/Xml/Linq/XContainer.cs

    • ContentReader の読み取りメソッドを高速パス(結合可能なテキストをバッファに追加して復帰)と低速パス(バッファをフラッシュしてから非テキストノードを処理)に分割
    • 連続するテキストノードを StringBuilder でバッファリング
    • ループの終了時および非テキストノード処理前にバッファをフラッシュする処理を追加
    • 同期・非同期の両ロードパスで末尾のバッファリングされたテキスト(XDocument のルート要素後の空白など)が保持されるよう対応
  • src/libraries/System.Private.Xml.Linq/tests/misc/RegressionTests.cs

    • テキスト分割配信をシミュレートする XmlReader を含む回帰テストを追加
    • 同期・非同期ロードのテストカバレッジを追加
    • 大規模入力に対する線形性ガード(アルゴリズム退化防止)

パフォーマンスへの影響

連続したテキストノードの処理が O(n²) から O(n) に改善されます。DataContractSerializer やストリーム読み込みで複数の小さなテキストノードが返される場合、顕著な高速化が期待できます。結果的なノードツリーは変更前と同一です。

関連Issue

#37893

その他

変更は System.Xml.Linq ライブラリの内部実装(IXmlSerializable ロードパス)に限定され、公開 API には影響ありません。AddStringSkipNotify による連続文字列の統合処理は変わらず、コンテナ切り替え時またはベース URI/行情報変更時には確実にバッファをフラッシュされるため、既存の動作は保証されます。


目次