スレッドが自分自身をロックする悲劇…

もう3ヶ月以上になるだろうか。GHOST/PHANToM さんが特定の条件で落ちてしまうバグに悩まされ続けていたのは。
どっかの誰かが GHOST/PHANToM を使ってるかもしれないんでここに書きます。
スタイラスボタンの押下イベントハンドラー(setSelectCallback で指定した関数)で、直接シーングラフをいじることはできません(たぶん)。
シーングラフをいじるには gstScene::lock 〜 unlock で囲む必要がありますが、おそらくこれは触力覚制御用スレッドを停止させる命令です。lock の動作としては

  1. 現在行っている触力覚処理が全て終わるまで待機し
  2. 停止状態に移行

だと思うんですが、ハンドラの制御内で lock しちゃうと 1. の待機時に自分自身の待ちを行うことになっちゃう。これで見事に Haptic-Process は破綻します。
この「破綻」がくせ者で、Windows2000 さんが完全に言うこと聞かなくなります。そりゃそうです。Haptic-Thread のプライオリティは高いですから。このイラつきようと言ったら「DOS 時代に PSS を作っていた頃 strdup のせいでSegFaultが起こりまくり、たっけさんがキレてキーボードを壊した」のを思い出すくらいです。

でももう大丈夫です。
SELECT 時に行いたい処理は UI スレッドに任せるようにしましたから。とりあえず Timer ですが、そのうち適切な WindowMessage を作ります。
さー、いよいよ音声入力サーバとの結合だ。