次のマクロ画面の認識が早すぎる
以下のバグが、マクロ画面 ScreenB にあるとします: ホストが新しいアプリケーション画面の表示を完全に終了する前に、マクロ・ランタイムが ScreenB のアクションの処理を開始する。このタイミングの異常が問題になる状況はほとんどないかも しれませんが、例えば ScreenB の最初のアクションが抽出アクションであり、 マクロ・ランタイムがこのアクションによって アプリケーション画面の行 15 と 16 からデータを読み取るとします。ホストが新規データを行 15 から 16 にすべて書き込む時間を待たず、マクロ・ランタイムがこのアクションを実行したとします。
この問題を分析すると、次のことが確認されます。
- セッションは、デフォルト接続 TN3270 を使用する 3270 ディスプレイ・セッションである。
- 次のアクションのシーケンスが実行される。
- 直前のマクロ画面の処理中に、マクロ・ランタイムは Enter キーを ホストに送る入力アクションを実行する。
- ホストは Enter キーを受信し、新しいアプリケーション画面のために コマンドとデータの最初のブロックを送信する。
- クライアントは最初のブロックを受信して処理し、 これによりホスト・アプリケーション画面の一部を更新するが、 全部は更新しない。特に、アプリケーション画面の行 15 と 16 が まだ更新されていません。
- 一方でマクロ・ランタイムは、新しいアプリケーション画面に一致する 有効な次のマクロ画面の認識を開始する。
- コマンドとデータの最初のブロックによってアプリケーション画面が 変更された結果、マクロ・ランタイムはマクロ ScreenB を次に処理する マクロ画面として認識する。
- マクロ・ランタイムは ScreenB 内の最初のアクション・エレメントを 実行する。これは、アプリケーション画面の行 15 と 16 からデータを 読み取る抽出アクションです。
- クライアントは 2 番目のコマンドとデータのブロックをホストから受信し、 処理する。これにより、行 15 と 16 を含む、アプリケーション画面の他の部分 が更新されます。
要約すれば、このタイミングの問題が起こった結果、 ホストが行 15 と 16 の更新を完了する前に、 マクロ・ランタイムが新しいアプリケーション画面の行 15 と 16 を読み取りました。