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:
parent
ddc2b83b3b
commit
8afd99d671
5 changed files with 34 additions and 13 deletions
19
ChangeLog
19
ChangeLog
|
@ -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
2
gc.c
|
@ -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
2
io.c
|
@ -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);
|
||||
|
|
18
string.c
18
string.c
|
@ -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)) {
|
||||
|
|
|
@ -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[];
|
||||
|
|
Loading…
Add table
Reference in a new issue