注意点
このページは、dotnet/runtimeリポジトリにマージされたPull Requestを自動的に収集し、その内容をAIが要約した内容を表示しています。そのため、必ずしも正確な要約ではない場合があります。
目次
#131867 Fix macOS crash in NetworkChange when the run loop thread already exited
- 作成者: @isaacisland
- 作成日時: 2026年08月05日 11:53:03(UTC)
- マージ日時: 2026年08月16日 18:43:58(UTC)
- ラベル: area-System.Net community-contribution
概要
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
その他
- 既知の追加課題(この修正スコープ外)
CFRunLoopRun()が早期リターンした場合、NetworkAddressChangedが以後発火しなくなる(サイレントエラー)。リカバリーには動作変更が必要なため、本修正では対象外。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
その他
変更は System.Xml.Linq ライブラリの内部実装(IXmlSerializable ロードパス)に限定され、公開 API には影響ありません。AddStringSkipNotify による連続文字列の統合処理は変わらず、コンテナ切り替え時またはベース URI/行情報変更時には確実にバッファをフラッシュされるため、既存の動作は保証されます。