Revision: 573 http://trac.macosforge.org/projects/ruby/changeset/573 Author: lsansonetti@apple.com Date: 2008-09-07 20:53:47 -0700 (Sun, 07 Sep 2008) Log Message: ----------- sync potential bytestrings Modified Paths: -------------- MacRuby/trunk/io.c Modified: MacRuby/trunk/io.c =================================================================== --- MacRuby/trunk/io.c 2008-09-08 03:53:33 UTC (rev 572) +++ MacRuby/trunk/io.c 2008-09-08 03:53:47 UTC (rev 573) @@ -712,7 +712,10 @@ } len = RSTRING_BYTELEN(str); - if ((n = len) <= 0) return n; + if ((n = len) <= 0) { + RSTRING_SYNC(str); + return n; + } if (fptr->wbuf == NULL && !(fptr->mode & FMODE_SYNC)) { fptr->wbuf_off = 0; fptr->wbuf_len = 0; @@ -731,10 +734,14 @@ fptr->wbuf_len += len; n = 0; } - if (io_fflush(fptr) < 0) + if (io_fflush(fptr) < 0) { + RSTRING_SYNC(str); return -1L; - if (n == 0) + } + if (n == 0) { + RSTRING_SYNC(str); return len; + } /* avoid context switch between "a" and "\n" in STDERR.puts "a". [ruby-dev:25080] */ if (fptr->stdio_file != stderr && !rb_thread_fd_writable(fptr->fd)) { @@ -750,7 +757,10 @@ } r = rb_write_internal(fptr->fd, RSTRING_BYTEPTR(str)+offset, l); /* xxx: other threads may modify given string. */ - if (r == n) return len; + if (r == n) { + RSTRING_SYNC(str); + return len; + } if (0 <= r) { offset += r; n -= r; @@ -761,6 +771,7 @@ if (offset < RSTRING_BYTELEN(str)) goto retry; } + RSTRING_SYNC(str); return -1L; } @@ -771,6 +782,7 @@ } MEMMOVE(fptr->wbuf+fptr->wbuf_off+fptr->wbuf_len, RSTRING_BYTEPTR(str)+offset, char, len); fptr->wbuf_len += len; + RSTRING_SYNC(str); return len; } @@ -4821,6 +4833,7 @@ RSTRING_BYTEPTR(line)[RSTRING_BYTELEN(line)-1] != '\n') { rb_io_write(out, rb_default_rs); } + RSTRING_SYNC(line); } return Qnil;
participants (1)
-
source_changes@macosforge.org