[#35599] Proc#== behaviour on 1.8.7 and 1.9.2 — Adam Prescott <adam@...>
I've encountered a problem when using Proc#== (with both lambdas and
[#35613] [Ruby 1.9 - Feature #4539][Assigned] Array#zip_with — Yui NARUSE <redmine@...>
> http://redmine.ruby-lang.org/issues/4539
Hi,
[#35618] Redmine issues — Benoit Daloze <eregontp@...>
Hello,
[#35621] [Ruby 1.9 - Bug #4555][Open] [PATCH] ext/socket/init.c: rsock_connect retries on interrupt — Eric Wong <normalperson@...>
[#35629] [Ruby 1.9 - Bug #4473] Calling return within begin still executes else — Mayank Kohaley <redmine@...>
[#35631] [Ruby 1.9 - Bug #4558][Open] TestSocket#test_closed_read fails after r31230 — Tomoyuki Chikanaga <redmine@...>
> ----------------------------------------
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
Tomoyuki Chikanaga <redmine@ruby-lang.org> wrote:
> Issue #4558 has been updated by Eric Wong.
KOSAKI Motohiro <kosaki.motohiro@gmail.com> wrote:
[#35632] [Ruby 1.9 - Bug #4559][Open] Proc#== does not match the documented behaviour — Adam Prescott <redmine@...>
(2012/11/28 16:10), matz (Yukihiro Matsumoto) wrote:
I believe this will be a spec change, albeit a small one. Can we
[#35636] [Ruby 1.9 - Feature #4560][Open] [PATCH] lib/net/protocol.rb: avoid exceptions in rbuf_fill — Eric Wong <redmine@...>
[#35637] [Ruby 1.9 - Bug #4561][Open] 1.9.2 requires parentheses around argument of method call in an array, where 1.8.7 did not — Dave Schweisguth <redmine@...>
[#35644] [Ruby 1.8 - Bug #4563][Open] Dir#tell broken — Daniel Berger <redmine@...>
[#35648] mvm branch status? — Eric Wong <normalperson@...>
Hello, I noticed the "mvm" branch in SVN hasn't been updated in over a year.
Hi Eric.
Has there been any thought on solving the C extension problem in MVM? In the present state, I've stopped working on it in Rubinius because there is no workable solution if there are C extensions in the mix.
Evan Phoenix <evan@fallingsnow.net> wrote:
On Thu, Apr 7, 2011 at 6:18 PM, Eric Wong <normalperson@yhbt.net> wrote:
[#35666] caching of the ancestor chain — Xavier Noria <fxn@...>
Why does Ruby cache the ancestors chain? I mean, not why the implementation implies that, but why it works that way conceptually.
Ah, in case it is not clear, where I find the metaphor broken is in that you can add methods to a mixin and have them available in classes that already included it, but if you include a new ancestor, then method dispatch in classes that already included the module aren't aware of the new chain.
Hi,
On Fri, Apr 8, 2011 at 7:56 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:
[#35678] [Ruby 1.9 - Bug #4564][Open] mingw-w64, truncate, ftruncate and ftello -- properly evalute it's existence — Luis Lavena <redmine@...>
[#35699] [Ruby 1.9 - Feature #4568][Open] [PATCH] file.c (rb_group_member): kill 256K of stack usage — redmine@...
[#35707] [Ruby 1.9 - Feature #4569][Open] Replace IPAddr with IPAddress — redmine@...
[#35713] [Ruby 1.9 - Bug #4571][Open] YAML.load given an ISO8601 timestamp creates an incorrect value for usec — redmine@...
[#35734] [Ruby 1.9 - Feature #4574][Open] Numeric#within — redmine@...
[#35753] [Ruby 1.9 - Bug #4576][Open] Range#step miss the last value, if end-exclusive and has float number — redmine@...
Hi,
2011/9/16 Kenta Murata <muraken@gmail.com>:
2011/9/16 Marc-Andre Lafortune <ruby-core@marc-andre.ca>:
On 16 September 2011 15:49, Tanaka Akira <akr@fsij.org> wrote:
Can somebody please reopen this issue? Since the test suite fix is
2011/9/17 Marc-Andre Lafortune <ruby-core@marc-andre.ca>:
2011/9/17 Tanaka Akira <akr@fsij.org>:
(2011/09/17 9:07), Tanaka Akira wrote:
I have not been watching ruby-core, but let me give a comment for this issue.
2011/9/17 Masahiro TANAKA <masa16.tanaka@gmail.com>:
2011/9/20 Tanaka Akira <akr@fsij.org>:
I haven't explained the reason of the error estimation in
On 21 September 2011 14:25, masa <masa16.tanaka@gmail.com> wrote:
[#35754] [Ruby 1.9 - Bug #4577][Open] (int...float).max should not raise an error — redmine@...
[#35759] [Ruby 1.8 - Bug #4578][Open] Fixnum.freeze not frozen? — redmine@...
[#35765] [Ruby 1.9 - Bug #4579][Open] SecureRandom + OpenSSL may repeat with fork — redmine@...
[#35777] hashes are not consistent across ruby processes? — Roger Pack <rogerdpack2@...>
Hello all.
[#35813] [Ruby 1.9 - Bug #4320] Bus Error in digest/sha2 on sparc — redmine@...
[#35814] [Ruby 1.9 - Bug #4320] Bus Error in digest/sha2 on sparc — redmine@...
[#35825] [Ruby 1.8 - Bug #4587][Open] RMATCH_REGS definition is wrong — redmine@...
[#35828] [Ruby 1.9 - Feature #4589][Open] add Queue#each() method and include Enumerable — redmine@...
[#35830] [Ruby 1.9 - Feature #3436] Spawn the timer thread lazily — redmine@...
[#35850] [Ruby 1.9 - Feature #4189] FileUtils#ln_r — Sakuro OZAWA <redmine@...>
[#35866] [Ruby 1.9 - Bug #4603][Open] lib/csv.rb: when the :encoding parameter is not provided, the encoding of CSV data is treated as ASCII-8BIT — yu nobuoka <nobuoka@...>
On Sun, Apr 24, 2011 at 1:33 AM, yu nobuoka <nobuoka@r-definition.com>wrote:
2011/4/25 James Gray <james@graysoftinc.com>:
On Sun, Apr 24, 2011 at 11:29 PM, NARUSE, Yui <naruse@airemix.jp> wrote:
[#35879] [Ruby 1.9 - Bug #4610][Open] Proc#curry behavior is inconsistent with lambdas containing default argument values — Joshua Ballanco <jballanc@...>
[#35883] [Ruby 1.9 - Bug #4611][Open] [BUG] Segementation fault reported — Deryl Doucette <me@...>
[#35895] [Ruby 1.9 - Feature #4614][Open] [RFC/PATCH] thread_pthread.c: lower RUBY_STACK_MIN_LIMIT to 64K — Eric Wong <normalperson@...>
[#35923] [Ruby 1.9 - Feature #4621][Open] NilClass#to_hash — Tsuyoshi Sawada <sawadatsuyoshi@...>
[#35933] [Ruby 1.9 - Bug #4623][Open] Consistent crash related to action_mailer — Alex Neth <alex@...>
[#35942] change in timeout error — Roger Pack <rogerdpack2@...>
Hello. Sorry if this is a repeat...
[#35943] [Ruby 1.9 - Feature #3905] rb_clear_cache_by_class() called often during GC for non-blocking I/O — Motohiro KOSAKI <kosaki.motohiro@...>
[ruby-core:35669] Re: [Ruby 1.9 - Bug #4558] TestSocket#test_closed_read fails after r31230
Tomoyuki Chikanaga <redmine@ruby-lang.org> wrote:
> ruby -v changed from - to ruby 1.9.3dev (2011-04-05 trunk 31241) [x86_64-darwin10.6.0]
>
> Hi,
>
> I applied Eric's patch, but TestSocket#test_closed_read still report same failure.
>
> I can reproduce EBADF with following script.
Thanks for testing, think I have a better fix below (supercedes my
original fix)
Also pushed to the "io-close-fixes" branch of git://bogomips.org/ruby.git
From d5f9659ea9c2e8e0ed67544ed35afef4ca2bb3c5 Mon Sep 17 00:00:00 2001
From: Eric Wong <normalperson@yhbt.net>
Date: Thu, 7 Apr 2011 19:25:20 +0000
Subject: [PATCH] io.c (rb_io_close): ensure IOError for cross-thread closes
We need to inform threads to stop operations on the FD before
closing it and also invalidate the fd member of the rb_io_t
struct for other threads to properly raise IOError.
FDs may be created and destroyed without the GVL, so
rb_thread_fd_close() may be improperly hitting the wrong
threads/FDs if we close() before notifying and in the worst case
or threads will end up reading/writing to an unexpected FD.
ref: [ruby-core:35631]
ref: http://redmine.ruby-lang.org/issues/4558
---
io.c | 25 ++++++++++++++++++-------
test/ruby/test_io.rb | 39 +++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+), 7 deletions(-)
diff --git a/io.c b/io.c
index 7ce7148..5d37b7f 100644
--- a/io.c
+++ b/io.c
@@ -3504,6 +3504,7 @@ maygvl_close(int fd, int keepgvl)
if (keepgvl)
return close(fd);
+ rb_thread_fd_close(fd);
/*
* close() may block for certain file types (NFS, SO_LINGER sockets,
* inotify), so let other threads run.
@@ -3525,6 +3526,8 @@ maygvl_fclose(FILE *file, int keepgvl)
if (keepgvl)
return fclose(file);
+ rb_thread_fd_close(fileno(file));
+
return (int)rb_thread_blocking_region(nogvl_fclose, file, RUBY_UBF_IO, 0);
}
@@ -3555,24 +3558,35 @@ fptr_finalize(rb_io_t *fptr, int noraise)
}
}
if (IS_PREP_STDIO(fptr) || fptr->fd <= 2) {
+ int fd = fptr->fd;
+
+ fptr->stdio_file = 0;
+ fptr->fd = -1;
+ rb_thread_fd_close(fd);
goto skip_fd_close;
}
if (fptr->stdio_file) {
+ FILE *stdio_file = fptr->stdio_file;
+
+ fptr->stdio_file = 0;
+ fptr->fd = -1;
+
/* fptr->stdio_file is deallocated anyway
* even if fclose failed. */
- if ((maygvl_fclose(fptr->stdio_file, noraise) < 0) && NIL_P(err))
+ if ((maygvl_fclose(stdio_file, noraise) < 0) && NIL_P(err))
err = noraise ? Qtrue : INT2NUM(errno);
}
else if (0 <= fptr->fd) {
+ int fd = fptr->fd;
+ fptr->fd = -1;
+
/* fptr->fd may be closed even if close fails.
* POSIX doesn't specify it.
* We assumes it is closed. */
- if ((maygvl_close(fptr->fd, noraise) < 0) && NIL_P(err))
+ if ((maygvl_close(fd, noraise) < 0) && NIL_P(err))
err = noraise ? Qtrue : INT2NUM(errno);
}
skip_fd_close:
- fptr->fd = -1;
- fptr->stdio_file = 0;
fptr->mode &= ~(FMODE_READABLE|FMODE_WRITABLE);
if (!NIL_P(err) && !noraise) {
@@ -3668,7 +3682,6 @@ VALUE
rb_io_close(VALUE io)
{
rb_io_t *fptr;
- int fd;
VALUE write_io;
rb_io_t *write_fptr;
@@ -3684,9 +3697,7 @@ rb_io_close(VALUE io)
if (!fptr) return Qnil;
if (fptr->fd < 0) return Qnil;
- fd = fptr->fd;
rb_io_fptr_cleanup(fptr, FALSE);
- rb_thread_fd_close(fd);
if (fptr->pid) {
rb_syswait(fptr->pid);
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index 6b8e6b5..3d086b3 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -1809,4 +1809,43 @@ End
Process.waitpid2(pid)
end
end
+
+ def test_cross_thread_close_fd
+ with_pipe do |r,w|
+ read_thread = Thread.new do
+ begin
+ r.read(1)
+ rescue => e
+ e
+ end
+ end
+
+ sleep(0.1) until read_thread.stop?
+ r.close
+ read_thread.join
+ assert_kind_of(IOError, read_thread.value)
+ end
+ end
+
+ def test_cross_thread_close_stdio
+ with_pipe do |r,w|
+ pid = fork do
+ $stdin.reopen(r)
+ r.close
+ read_thread = Thread.new do
+ begin
+ $stdin.read(1)
+ rescue => e
+ e
+ end
+ end
+ sleep(0.1) until read_thread.stop?
+ $stdin.close
+ read_thread.join
+ exit(IOError === read_thread.value)
+ end
+ assert Process.waitpid2(pid)[1].success?
+ end
+ rescue NotImplementedError
+ end
end
--
Eric Wong