* eval.c (rb_with_disable_interrupt): use ENABLE_INTS instead of

ALLOW_INTS which may switch context.  [ruby-dev:22319]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@5246 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2003-12-22 09:37:13 +00:00
Родитель d0133e413d
Коммит 1c09bfad5c
3 изменённых файлов: 17 добавлений и 10 удалений

Просмотреть файл

@ -30,6 +30,9 @@ Mon Dec 22 13:40:19 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>
Mon Dec 22 00:32:43 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (rb_with_disable_interrupt): use ENABLE_INTS instead of
ALLOW_INTS which may switch context. [ruby-dev:22319]
* ext/syck/emitter.c (syck_emitter_write): str bigger than
e->bufsize causes buffer overflow. [ruby-dev:22307]

10
eval.c
Просмотреть файл

@ -4733,14 +4733,18 @@ rb_with_disable_interrupt(proc, data)
int status;
DEFER_INTS;
RUBY_CRITICAL(
{
int thr_critical = rb_thread_critical;
rb_thread_critical = Qtrue;
PUSH_TAG(PROT_NONE);
if ((status = EXEC_TAG()) == 0) {
result = (*proc)(data);
}
POP_TAG();
);
ALLOW_INTS;
rb_thread_critical = thr_critical;
}
ENABLE_INTS;
if (status) JUMP_TAG(status);
return result;

14
hash.c
Просмотреть файл

@ -46,13 +46,6 @@ VALUE rb_cHash;
static VALUE envtbl;
static ID id_hash, id_call, id_default;
VALUE
rb_hash(obj)
VALUE obj;
{
return rb_funcall(obj, id_hash, 0);
}
static VALUE
eql(args)
VALUE *args;
@ -84,6 +77,13 @@ rb_any_cmp(a, b)
return !rb_with_disable_interrupt(eql, (VALUE)args);
}
VALUE
rb_hash(obj)
VALUE obj;
{
return rb_funcall(obj, id_hash, 0);
}
static int
rb_any_hash(a)
VALUE a;