зеркало из https://github.com/github/ruby.git
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37849 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
e4b54208d0
Коммит
6f3ad9bd3d
|
@ -1,3 +1,10 @@
|
||||||
|
Mon Nov 26 15:33:02 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
||||||
|
|
||||||
|
* 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@ruby-lang.org>
|
Mon Nov 26 12:11:09 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* win32/Makefile.sub (DLNOBJ): missing in r37821.
|
* win32/Makefile.sub (DLNOBJ): missing in r37821.
|
||||||
|
|
8
bignum.c
8
bignum.c
|
@ -2657,7 +2657,7 @@ rb_big_mul(VALUE x, VALUE y)
|
||||||
struct big_div_struct {
|
struct big_div_struct {
|
||||||
long nx, ny;
|
long nx, ny;
|
||||||
BDIGIT *yds, *zds;
|
BDIGIT *yds, *zds;
|
||||||
VALUE stop;
|
volatile VALUE stop;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
|
@ -2708,8 +2708,8 @@ bigdivrem1(void *ptr)
|
||||||
static void
|
static void
|
||||||
rb_big_stop(void *ptr)
|
rb_big_stop(void *ptr)
|
||||||
{
|
{
|
||||||
VALUE *stop = (VALUE*)ptr;
|
struct big_div_struct *bds = ptr;
|
||||||
*stop = Qtrue;
|
bds->stop = Qtrue;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
@ -2794,7 +2794,7 @@ bigdivrem(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp)
|
||||||
bds.yds = yds;
|
bds.yds = yds;
|
||||||
bds.stop = Qfalse;
|
bds.stop = Qfalse;
|
||||||
if (nx > 10000 || ny > 10000) {
|
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 {
|
else {
|
||||||
bigdivrem1(&bds);
|
bigdivrem1(&bds);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче