From: KOSAKI Motohiro Date: 2012-11-26T16:08:40+09:00 Subject: [ruby-dev:46627] Re: [ruby-changes:25793] kosaki:r37850 (trunk): * bignum.c (bigdivrem): restart calculation when bigdivrem1 was ruby-devへ移動 > New Revision: 37850 > > http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37850 > > Log: > * bignum.c (bigdivrem): restart calculation when bigdivrem1 was > interrupted by signal. Otherwise, ruby script may see a garbage > value. mrknさんへ、 今日、ささださんとThread.control_interruptを議論しているときに、bignumのrb_thread_call_without_gvl()の使い方が間違っていることに気づいて修正を2つほど入れました。 1つは、volatile漏れのせいで bds->stopのチェックがレジスタに乗ってしまい無意味になっていた件の修正。もう1つはsignalを受け、かつtrap handlerが例外を投げなかった時に適切なrestart処理がなかったためRubyスクリプトまで計算途中のゴミの値が漏れていたことです。 われわれが使っていたテストスクリプトは以下です。 http://www.atdot.net/sp/view/i3y2em さて、申し訳ないのですが、依頼が2点あります。 1)test-all にテストを追加したいのですが、上記テストはあまりにも遅すぎて好ましくありません。なにかテストを考えてもらえないでしょうか 2)現状の restart処理は一番最初まで、大きく処理を戻してるので大変非効率。たぶんもう少し綺麗にretryできるはずなので、最適化についてちょっと考えてみてもらえませんか? お手数ですが、よろしくお願いします。