チケット #117 (closed discussion: wontfix)

登録: 2 年 前

最終更新: 5 ヶ月 前

Threadで割り込みハンドラの実行に失敗する事がある問題に対応したパッチのレビューとマージ

報告者: yamaharu 担当者: yossy
優先度: major マイルストーン: ActionScript Thread Library 1.1
コンポーネント: Thread キーワード:
関係者:

チケットの概要

Threadで割り込みハンドラの実行に失敗する事がある問題に対応したパッチをbranchesにコミットしました。この問題用のテストと既存のテストは一応すべてパスしています。また、この問題の詳細についてはhttp://www.imajuk.com/blog/archives/2010/01/thread1.htmlに記述しています。 http://www.libspark.org/changeset/3324

この問題がバグなのか仕様なのか僕にはよくわからないので、その辺の判断も合わせてパッチのレビュー後、問題がなさそうであればtrunkにマージしていただけると嬉しいです。

添付ファイル

チケットの履歴

( フォローアップ: ↓ 3 ) 2010/01/22 16:58:31 更新者:nobu

はじめまして。 nobu と申します。

ほぼ同じ内容として僕もチケット #104 を登録しております。 早速 yamaharu さんがコミットしてくださったブランチを試してみたのですが、 割り込みされてから処理されるまで 1 cycle ( 実質 2cycle ) 空いてしまうのがひっかかりました。

この 1cycle の間にイベントが飛んでくると普通に処理されてしまいます。 ナビゲーションなどで、選択されたボタンはハイライトさせたままで、それ以外をノーマルに戻すような処理の場合、 ロールオーバー・ロールアウト処理に割り込みをかけたとしても、それが処理される前にロールアウトなどイベントが飛んでくるとイベント側が優先されてしまいます。

以前僕が作ったパッチが、割り込みされたタイミングで処理するものなのですが、それとの比較ページを作ってみました。 なかなかニュアンスが伝わらないかもですが、一度見ていだたけると良いかもです。

2010/01/22 16:59:48 更新者:nobu

URL 貼り忘れてました。

http://izukawa.org/tmp/thread/

です。 そのうち消すと思うので、リンク切れしてたらごめんなさい。

(親コメント: ↑ 1 ; フォローアップ: ↓ 4 ) 2010/01/22 18:07:05 更新者:yamaharu

nobu への返信

nobuさん、こんにちは。

おそらく僕が問題にしている事とnobuさんが問題にしている事は若干違いがあると思います。

nobuさんが問題にしている事は、「割り込み後にイベントを受け取ってしまう」事ですよね? 僕が問題にしているのは「割り込み時に割り込みハンドラが実行されない事がある」事です。 僕のパッチは後者の問題に対するパッチです。

nobuさんのパッチでは残念ながら後者の問題に対応できていないように思えます。 自分のテストを実行してみましたが、2つあるテストの最初のテストに失敗しました。 割り込みハンドラが実行されなかったようです。また割り込み後にもまだイベントを受け取ってしまっているようです。

..............................................E.
Time: 11.546
There was 1 failure:
1) inturruptHandlerExecution(org.libspark.thread::InterruptHandlerTest)
Error: expected:<event interrupt [interrutHandler finalize] > but was:<event interrupt [event] >

ただ、nobuさんに指摘していただいた割り込み後のサイクルでイベントを受け取ってしまうのは問題ですね。 自分のテストで確認できていたつもりですが、もう少し検証してみます。 再現するサンプルコードなどいただけるとありがたいです :)

(親コメント: ↑ 3 ; フォローアップ: ↓ 5 ) 2010/01/22 19:52:56 更新者:nobu

yamaharu への返信

あらら。テスト通りませんでしたか。既存のテストに通ったので安心してました。すいません。

前提としている事としては、同じ「割り込み処理が実行されない場合がある。」ってトコロですよ。 で、割り込み処理は即時実行されるべきだろう。という僕の出した解がこのパッチでした。 パッチって言っても、 event の処理からコピペしてきただけなんですがw

より良いものになるように、改良に期待しております :-)

(親コメント: ↑ 4 ; フォローアップ: ↓ 7 ) 2010/01/25 14:08:45 更新者:yamaharu

nobu への返信

割り込み後イベントを受け取ってしまう問題を修正してみました。
http://www.libspark.org/changeset/3352

詳細はhttp://www.imajuk.com/blog/archives/2010/01/thread3.htmlを見てみてください。

割り込み後割り込みハンドラが実行されるまでに1~2サイクルの間が空いてしまいますが、Threadはあまりシビアな実行インターバルを要求されるコードには向いていないと思うので、これは実用上問題にならないと個人的には思います。

2010/02/02 19:30:10 更新者:yossy

(In [3371]) Thread: 割り込みハンドラがすぐに実行されるように修正 (see #104, #117)

(親コメント: ↑ 5 ; フォローアップ: ↓ 8 ) 2010/02/02 19:37:46 更新者:yossy

  • ステータスnew から closed に更新されました。
  • 解決方法wontfix に更新されました。

yamaharu への返信

こんにちは。yossy です。

いつも ActionScript Thread Library (そうめん) を使って頂いて、ありがとうございます。また、今回、詳細にレポートを下さり、ありがとうございます。

ブログ内でも考察されていますが、yamaharu さんが問題とされている挙動は、すみませんがそうめんの仕様に沿ったものということになります。というのも、イベントによって実行される実行関数が終了した段階で、Thread は待機状態になっていないためです。意図通りに割り込みを機能させるためには、以下のようにコードを変更し、すぐに待機状態に入って頂く必要があります。

// ※テストケースより引用

// Before:
//イベントをキャッチしたら再びイベントをリスンして待機状態へ
event(dispatcher, InternalEvent.COMPLETE, function():void
{
	Static.log += "event ";
	//イベントを受け取ったら再びイベントをリスン
    next(run); 
});

// After:
//イベントをキャッチしたら再びイベントをリスンして待機状態へ
event(dispatcher, InternalEvent.COMPLETE, function():void
{
	Static.log += "event ";
	//イベントを受け取ったら再びイベントをリスン
    run(); // <- すぐに待機状態に入るようにする
});

このように変更することで、問題なく対処出来るかと思います。

こちらでも調査したところ、イズカワさんが問題とされている件については、Thread の内部動作を変更しないとどうしても対処出来ない場合があるため、修正を行いました。具体的には、SerialExecutor 等を使用している場合に、SerialExecutor に対して割り込みを掛けても、addThread されている Thread に対してすぐに割り込みがかからず、イベントを受け取ってしまうことがある、などです。

新たに「イベント配信直前の割り込み」、「イベント配信直後の割り込み」、「親子関係のあるスレッドへの割り込み」の三つのテストも追加しましたので、併せてご覧頂ければと思います。

http://www.libspark.org/changeset/3371

yamaharu さんの期待には沿えない修正となってしまったかもしれませんが、お二人の修正内容の両立はできないことをふまえたうえで、問題内容について検討した結果ですので、ご理解いただければと思います。

問題やバグ報告、意見要望等ありましたら気軽に言ってください。

引き続きそうめんをよろしくおねがいします!

(親コメント: ↑ 7 ) 2010/02/11 15:14:49 更新者:yamaharu

対応していただいてありがとうございます! trunkをsvn upして確認しました。 自分の修正方法よりもこちらのパッチの方がスマートだと思います。 また何かありましたらご報告しますのでよろしくお願いします。

2010/06/26 11:02:26 更新者:HsvsRsvsesv

<a href="http://dsssx.com">dsssx</a>

2010/08/16 23:41:56 更新者:HsvsRsvsesv

2010/08/17 05:57:24 更新者:HsvsRsvsesv

<a href="http://hou-dr.com/buy-renagel-usa.html">sevelamer hydrochloride</a>

2010/08/17 05:57:54 更新者:HsvsRsvsesv

<a href="http://hou-dr.com/buy-renagel-usa.html">sevelamer hydrochloride</a>

2010/08/17 17:25:36 更新者:HsvsRsvsesv

<a href="http://hou-dr.com/buy-urispas-usa.html">flavoxate</a>

2010/08/20 20:39:42 更新者:HsvsRsvsesv

<a href="http://uw-dr.com/buy-pyridium-usa.html">online pyridium</a>

2010/08/22 05:34:52 更新者:HsvsRsvsesv

<a href="http://uw-dr.com/buy-arimidex-usa.html">order arimidex</a>

2010/08/22 21:47:03 更新者:HsvsRsvsesv

<a href="http://uw-dr.com/buy-aygestin-usa.html">order aygestinn</a>

2010/08/23 19:28:33 更新者:HsvsRsvsesv

<a href="http://uw-dr.com/buy-danocrine-usa.html">buy danocrine online</a>

2010/08/24 06:13:48 更新者:HsvsRsvsesv

<a href="http://uw-dr.com/buy-dostinex-usa.html">buy dostinex</a>

2010/08/25 15:43:53 更新者:HsvsRsvsesv

<a href="http://uw-dr.com/buy-lovegra-usa.html">buy lovegra online</a>

2010/08/27 01:46:28 更新者:HsvsRsvsesv

<a href="http://uw-dr.com/buy-premarin-usa.html">buy premarin online</a>

2010/08/30 01:14:02 更新者:HsvsRsvsesv

<a href="http://hung-md.com/">buy viagrawp online</a>

2010/09/27 03:02:07 更新者:HsvsRsvsesv

2010/10/04 04:52:41 更新者:HsvsRsvsesv

<a href="http://slotsoasisss.com/play-casino-card-game.html">play casino card game</a>

2010/10/07 07:47:25 更新者:HsvsRsvsesv

<a href="http://slotssoasis.com/slots-online-72games.html">slingo online games</a>

2010/12/03 00:23:13 更新者:HsvsRsvsesv

<a href="http://kjvsx.com/allegra.php">allegra birth control</a>

2010/12/04 09:57:33 更新者:HsvsRsvsesv

<a href="http://kjvsx.com/prozac.php">prozac 20mg</a>

2011/09/03 18:22:22 更新者:UtNohtwA

bpaSoMT


追記/更新 #117 (Threadで割り込みハンドラの実行に失敗する事がある問題に対応したパッチのレビューとマージ)




操作