1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* string.c (rb_str_locktmp): check STR_TMPLOCK flag before

locking.  [ruby-dev:24727]

* gc.c (gc_mark): stricter GC stack check.

* string.c (str_gsub): should have removed rb_str_unlocktmp(str).
  [ruby-dev:24708]

* string.c (str_gsub): string modify check no longer based on
  tmplock.  [ruby-dev:24706]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@7216 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2004-11-05 16:01:53 +00:00
parent ddc2b83b3b
commit 8afd99d671
5 changed files with 34 additions and 13 deletions

View file

@ -1,3 +1,8 @@
Sat Nov 6 00:46:27 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (rb_str_locktmp): check STR_TMPLOCK flag before
locking. [ruby-dev:24727]
Fri Nov 5 18:12:42 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk/scrollable.rb: divide Scrollable module into
@ -20,6 +25,20 @@ Fri Nov 5 13:17:54 2004 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tk/lib/tk/text.rb: bug fix
Fri Nov 5 08:52:48 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
* gc.c (gc_mark): stricter GC stack check.
Fri Nov 5 08:34:43 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (str_gsub): should have removed rb_str_unlocktmp(str).
[ruby-dev:24708]
Thu Nov 4 21:25:38 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (str_gsub): string modify check no longer based on
tmplock. [ruby-dev:24706]
Thu Nov 4 19:27:46 2004 NAKAMURA Usaku <usa@ruby-lang.org>
* io.c (rb_f_open): fix typo.

2
gc.c
View file

@ -706,7 +706,7 @@ gc_mark(ptr, lev)
if (obj->as.basic.flags & FL_MARK) return; /* already marked */
obj->as.basic.flags |= FL_MARK;
if (lev > GC_LEVEL_MAX) {
if (lev > GC_LEVEL_MAX || (lev == 0 && ruby_stack_check())) {
if (!mark_stack_overflow) {
if (mark_stack_ptr - mark_stack < MARK_STACK_MAX) {
*mark_stack_ptr = ptr;

2
io.c
View file

@ -462,11 +462,9 @@ io_write(io, str)
rb_io_check_writable(fptr);
f = GetWriteFile(fptr);
rb_str_locktmp(str);
rb_str_locktmp(str);
n = rb_io_fwrite(RSTRING(str)->ptr, RSTRING(str)->len, f);
rb_str_unlocktmp(str);
rb_str_unlocktmp(str);
if (n == -1L) rb_sys_fail(fptr->path);
if (fptr->mode & FMODE_SYNC) {
io_fflush(f, fptr);

View file

@ -464,7 +464,6 @@ str_independent(str)
VALUE str;
{
if (FL_TEST(str, STR_TMPLOCK)) {
FL_UNSET(str, STR_TMPLOCK);
rb_raise(rb_eRuntimeError, "can't modify string; temporarily locked");
}
if (OBJ_FROZEN(str)) rb_error_frozen("string");
@ -641,6 +640,9 @@ VALUE
rb_str_locktmp(str)
VALUE str;
{
if (FL_TEST(str, STR_TMPLOCK)) {
rb_raise(rb_eRuntimeError, "temporal locking already locked string");
}
FL_SET(str, STR_TMPLOCK);
return str;
}
@ -649,6 +651,9 @@ VALUE
rb_str_unlocktmp(str)
VALUE str;
{
if (!FL_TEST(str, STR_TMPLOCK)) {
rb_raise(rb_eRuntimeError, "temporal unlocking already unlocked string");
}
FL_UNSET(str, STR_TMPLOCK);
return str;
}
@ -2034,9 +2039,9 @@ str_gsub(argc, argv, str, bang)
VALUE pat, val, repl, match, dest;
struct re_registers *regs;
long beg, n;
long offset, blen, len;
long offset, blen, slen, len;
int iter = 0;
char *buf, *bp, *cp;
char *buf, *bp, *sp, *cp;
int tainted = 0;
if (argc == 1 && rb_block_given_p()) {
@ -2063,9 +2068,9 @@ str_gsub(argc, argv, str, bang)
dest = rb_str_new5(str, 0, blen);
buf = RSTRING(dest)->ptr;
bp = buf;
cp = RSTRING(str)->ptr;
sp = cp = RSTRING(str)->ptr;
slen = RSTRING(str)->len;
rb_str_locktmp(str);
rb_str_locktmp(dest);
while (beg >= 0) {
n++;
@ -2074,7 +2079,7 @@ str_gsub(argc, argv, str, bang)
if (iter) {
rb_match_busy(match);
val = rb_obj_as_string(rb_yield(rb_reg_nth_match(0, match)));
str_mod_check(dest, buf, blen);
str_mod_check(str, sp, slen);
rb_backref_set(match);
}
else {
@ -2124,7 +2129,6 @@ str_gsub(argc, argv, str, bang)
}
rb_backref_set(match);
*bp = '\0';
rb_str_unlocktmp(str);
rb_str_unlocktmp(dest);
if (bang) {
if (str_independent(str)) {

View file

@ -1,14 +1,14 @@
#define RUBY_VERSION "1.8.2"
#define RUBY_RELEASE_DATE "2004-11-05"
#define RUBY_RELEASE_DATE "2004-11-06"
#define RUBY_VERSION_CODE 182
#define RUBY_RELEASE_CODE 20041105
#define RUBY_RELEASE_CODE 20041106
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8
#define RUBY_VERSION_TEENY 2
#define RUBY_RELEASE_YEAR 2004
#define RUBY_RELEASE_MONTH 11
#define RUBY_RELEASE_DAY 5
#define RUBY_RELEASE_DAY 6
RUBY_EXTERN const char ruby_version[];
RUBY_EXTERN const char ruby_release_date[];