[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1235] Re: ieatta2.



小柳です。

VMware 上での countup2 動作に関してまとめてみます。

・countup2 を起動すると非常に動作が重くなり、アクティブウインドウ
の切替(画面の書換が終了するまで)に 3秒くらいかかったりする

・問題が起こるのは countup2 だけで countup1 では発生しない

・F9 あるいは F10 を押して アクティブウインドウが変わり、
画面書換が終わる前に F9 あるいは F10 を押すと、1回目の画面書換が
スキップされて、 初期状態から 2回キーを押した後の結果が画面で表示され
る。

詳しく説明すると、通常では最前面から
(1)A->B->C
とウインドウが表示されている時に F9 を押すと
(2)C->A->B
と表示され、もう一度 F9 を押すと
(3)B->C->A
と表示されるのが通常動作であるが、
(1)からF9を押して(2)の画面表示がされる前に
F9を押すとBが最前面のウインドウとして表示される。 つまり、

(1)A->B->C     <- F9

(C->A->B の表示が完了する前に F9を押す)

(2)B->A (この次点で A->C のつながりは失われている) <-F9

(3)A->B

となる。

Hidemi KAWAI wrote:
> 
>   こんにちは、川合です。
> 

>   countup2の方のバグは、[OSASK 1224]で再現状況を教えていただいた
> のですが、うちでは再現できませんでした。VMware上でしか起こせない
> のかもしれません。また、これらの処理の管轄はwinman0なので、そち
> らのソースを綿密に見直してみましたが、僕には悪そうなところが見つ
> けられませんでした。・・・僕がこのルーチンを書いたので、ソースを
> 読むときに余計な先入観があるのかもしれません(この変数は必ずノン
> ゼロとか、この関数への分岐は起き得ないとか・・・もちろん、そうい
> う先入観に迷わされないように努力はしていますが)。そういう先入観
> が全くない方が読み直せば、簡単に問題点を指摘できるかもしれません

  ソースを見て私が推測すると、countup2 を起動している時には
ウインドウ切替処理が終了していない時に、次のウインドウ切替処理が
呼ばれると、前の処理が完了するまで待つはずなのに、待たずに次の処理を
行ってしまうため、ウインドウの関係 ->up ->down がこわれてしまうのでは
ないでしょうか。

  この前の処理が完了するまで待つのが lib_waitsignal() だと思うのですが、

>  countup系は一秒間に100回もタイマーからシグナルを受け取るうえに
>シグナル処理部分がずさんなのですぐにシグナルをため込んでしまう可
>能性があります。

これが原因で、lib_waitsignal() が正常に動作していないかもしれません。

--
小柳 雅明(Koyanagi.Masaaki !Atmark! nifty.ne.jp)