Skip to content

v1.5.2.6

Choose a tag to compare

@Eschamali Eschamali released this 05 Feb 15:18
· 1965 commits to main since this release

【不具合修正 (Fix)】 受信ループにおける、無限ループ問題の、修正

Chromium-Automation-with-CDP-for-VBA

問題の概要:

特定の、稀な条件下において、invokeMethodなどが、内部で実行する、CDPメッセージの受信ループが、無限ループに陥り、VBAがフリーズする、という、深刻な不具合がありました。

原因分析:

この問題は、以下の複数の条件が、同時に、発生した場合に、トリガーされていました。

  1. イベントキャプチャ機能の、ON/OFFが、切り替わるなど、内部状態が、複雑に、変化する。
  2. Split後の解析で、 目的の「コマンド応答」 が、到着する。
  3. 最後の要素が、メッセージの"境界"(vbNullChar)を、またぐ形で、 データが"欠損" して、受信される。

この結果、次の受信処理を行う際、欠損データを蓄積するバッファが、 [欠損データ][コマンド結果] という、1つの文字列に、 欠けたJsonと完全なJson といった感じでくっついてしまい、「コマンド結果はまだ来てない」と、誤判断し、ループが、抜けられなくなっていました。

修正内容:

この 「競合状態(Race Condition)」 に、起因する、無限ループを、根本的に、解決するため、受信ループの 終了判定ロジック を、強化しました。

  • 「欠損データフラグ」の、導入:
    • 受信データをSplitした結果、最後の要素が、空文字でない場合(=データが、vbNullCharで、終わっていない)、これを 「欠損データあり」 と、判定する、内部フラグを、新設しました。
  • ループ終了条件の、厳格化:
    • 受信ループが、終了する条件を、
      「目的の、コマンド応答を、受信した」
      "かつ"
      「欠損データフラグが、立っていない」
    • という、AND条件に、変更しました。

この修正により、たとえ、コマンド応答と、データの欠損が、同時に発生しても、ループは、次のデータが、到着し、メッセージが"完全な"形になるまで、安全に、待機を続けます。
これにより、ライブラリの、非同期処理における、安定性と信頼性が、大幅に、向上しました。