ruby-changes:25792
From: kosaki <ko1@a...>
Date: Mon, 26 Nov 2012 15:52:20 +0900 (JST)
Subject: [ruby-changes:25792] kosaki:r37849 (trunk): * bignum.c (big_div_struct): added volatile to 'stop' member.
kosaki 2012-11-26 15:49:48 +0900 (Mon, 26 Nov 2012) New Revision: 37849 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37849 Log: * bignum.c (big_div_struct): added volatile to 'stop' member. Otherwise, "if (bds->stop)" check in bigdivrem1 don't read memory and ignore interrupt. * bignum.c (bigdivrem, rb_big_stop): ditto. Modified files: trunk/ChangeLog trunk/bignum.c Index: ChangeLog =================================================================== --- ChangeLog (revision 37848) +++ ChangeLog (revision 37849) @@ -1,3 +1,10 @@ +Mon Nov 26 15:33:02 2012 KOSAKI Motohiro <kosaki.motohiro@g...> + + * bignum.c (big_div_struct): added volatile to 'stop' member. + Otherwise, "if (bds->stop)" check in bigdivrem1 don't read + memory and ignore interrupt. + * bignum.c (bigdivrem, rb_big_stop): ditto. + Mon Nov 26 12:11:09 2012 Nobuyoshi Nakada <nobu@r...> * win32/Makefile.sub (DLNOBJ): missing in r37821. Index: bignum.c =================================================================== --- bignum.c (revision 37848) +++ bignum.c (revision 37849) @@ -2657,7 +2657,7 @@ struct big_div_struct { long nx, ny; BDIGIT *yds, *zds; - VALUE stop; + volatile VALUE stop; }; static void * @@ -2708,8 +2708,8 @@ static void rb_big_stop(void *ptr) { - VALUE *stop = (VALUE*)ptr; - *stop = Qtrue; + struct big_div_struct *bds = ptr; + bds->stop = Qtrue; } static VALUE @@ -2794,7 +2794,7 @@ bds.yds = yds; bds.stop = Qfalse; if (nx > 10000 || ny > 10000) { - rb_thread_call_without_gvl(bigdivrem1, &bds, rb_big_stop, &bds.stop); + rb_thread_call_without_gvl(bigdivrem1, &bds, rb_big_stop, &bds); } else { bigdivrem1(&bds); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/