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

[OSASK 3394] Re: バグ発見.Date: Fri, 08 Mar 2002 05:44:50 -0000



  こんにちは、川合です。


Hidemi KAWAI は 2002/03/04 18:58:14 の「[OSASK 3359] Re: バグ発
見.」で書きました:

>所を突き止めました。timerdrvのバグです。たいしたバグではなさそう
>ですが、timerdrvの内部仕様を忘れてしまったので、修復にはちょっと
>時間がかかります。

  この問題は解決しました。

  問題は意外にも、OSASK側ではなくmswp04にありました。

  しかしこれはかりんさんの落ち度というよりは、introbでの説明不十
分によるものだと思います。だから僕のせいです。すみません。

  詳細は以下の通りです。

  まず、mswp04で以下の操作をすると、ほぼ確実にこのバグを発現させ
られます(mswp05でも起きます)。

1.mswp04を起動する。
2.スペースを押して開く。
3.すぐにEnterを押す。
4.すぐにスペースを押す。
5.ちょっとの間待つ(1秒程度)。

  ポイントは、2.の動作をしてから4.の動作を完了するまでに1秒
の時間制限があることです。1秒以上かかった場合は、バグは発現しま
せん。また2.や4.でいきなり爆弾にあたってしまった場合もバグは
回避されます。・・・そんなわけで、このバグに当たるのは少し運が必
要です。

  ではどうしてこの条件でバグが出るのかというと、mswp04のソースで
Enterを押した場合にタイマーをキャンセルしていないせいです。これ
により、待機状態のタイマーに再度設定をすることになり、timerルー
チンが混乱していました(休止状態のタイマーにしか設定は許されない
のだか、introb08の説明は誤記があり支離滅裂な記述になっていた)。

  対策は2つ行います。

・timerルーチンでこのような誤操作を検出するようにし、ハングアッ
  プではなくINT(0x03);を起こすようにする。・・・今のところは、極
  力チェックをサボるという方針なんですが、さすがにハングアップは
  ひどすぎるので。

・introb09を用意する。

  以上です。

---

  なお、introa06にもミスを見つけたので、introa07, introb09の両方
を一般公開しました。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/