From 01b6c01cb6340e0d0d2d63c7fbbc6820f5aac56f Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 21 Aug 2002 08:31:25 +0000 Subject: [PATCH] * eval.c (rb_thread_cleanup): should not modify the global variable curr_thread. * re.c (rb_reg_initialize_m): frozen check should be moved here from rb_reg_initialize(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2732 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++++++++ eval.c | 11 ++++++----- re.c | 6 +++--- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2874521fd0..b67b264a2e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Aug 21 16:43:19 2002 Yukihiro Matsumoto + + * eval.c (rb_thread_cleanup): should not modify the global + variable curr_thread. + Tue Aug 20 19:39:03 2002 WATANABE Hirofumi * file.c (rb_file_s_expand_path): accept drive letter on Cygwin. @@ -17,6 +22,11 @@ Mon Aug 19 19:01:55 2002 Nobuyoshi Nakada * misc/inf-ruby.el (ruby-send-terminator): added to make unique terminator. +Mon Aug 19 17:08:19 2002 Yukihiro Matsumoto + + * re.c (rb_reg_initialize_m): frozen check should be moved here + from rb_reg_initialize(). + Mon Aug 19 15:38:44 2002 Yukihiro Matsumoto * array.c (sort_2): comparison should be done as signed long. diff --git a/eval.c b/eval.c index 7837083c10..6927a8d446 100644 --- a/eval.c +++ b/eval.c @@ -8627,13 +8627,14 @@ rb_thread_wait_other_threads() static void rb_thread_cleanup() { - rb_thread_t th; + rb_thread_t curr, th; - while (curr_thread->status == THREAD_KILLED) { - curr_thread = curr_thread->prev; + curr = curr_thread; + while (curr->status == THREAD_KILLED) { + curr = curr_thread->prev; } - FOREACH_THREAD(th) { + FOREACH_THREAD_FROM(curr, th) { if (th->status != THREAD_KILLED) { rb_thread_ready(th); th->gid = 0; @@ -8643,7 +8644,7 @@ rb_thread_cleanup() } } } - END_FOREACH(th); + END_FOREACH_FROM(curr, th); } int rb_thread_critical; diff --git a/re.c b/re.c index 5c9a858a70..8eeab0cb21 100644 --- a/re.c +++ b/re.c @@ -833,9 +833,6 @@ rb_reg_initialize(obj, s, len, options) { struct RRegexp *re = RREGEXP(obj); - if (OBJ_FROZEN(obj)) { - rb_error_frozen("Regexp"); - } if (re->ptr) re_free_pattern(re->ptr); if (re->str) free(re->str); re->ptr = 0; @@ -1023,6 +1020,9 @@ rb_reg_initialize_m(argc, argv, self) } } + if (OBJ_FROZEN(self)) { + rb_error_frozen("Regexp"); + } src = argv[0]; if (TYPE(src) == T_REGEXP) { rb_reg_check(src);