[#15359] Timeout::Error — Jeremy Thurgood <jerith@...>

Good day,

41 messages 2008/02/05
[#15366] Re: Timeout::Error — Eric Hodel <drbrain@...7.net> 2008/02/06

On Feb 5, 2008, at 06:20 AM, Jeremy Thurgood wrote:

[#15370] Re: Timeout::Error — Jeremy Thurgood <jerith@...> 2008/02/06

Eric Hodel wrote:

[#15373] Re: Timeout::Error — Nobuyoshi Nakada <nobu@...> 2008/02/06

Hi,

[#15374] Re: Timeout::Error — Jeremy Thurgood <jerith@...> 2008/02/06

Nobuyoshi Nakada wrote:

[#15412] Re: Timeout::Error — Nobuyoshi Nakada <nobu@...> 2008/02/07

Hi,

[#15413] Re: Timeout::Error — Jeremy Thurgood <jerith@...> 2008/02/07

Nobuyoshi Nakada wrote:

[#15414] Re: Timeout::Error — Nobuyoshi Nakada <nobu@...> 2008/02/07

Hi,

[#15360] reopen: can't change access mode from "w+" to "w"? — Sam Ruby <rubys@...>

I ran 'rake test' on test/spec [1], using

16 messages 2008/02/05
[#15369] Re: reopen: can't change access mode from "w+" to "w"? — Nobuyoshi Nakada <nobu@...> 2008/02/06

Hi,

[#15389] STDIN encoding differs from default source file encoding — Dave Thomas <dave@...>

This seems strange:

21 messages 2008/02/06
[#15392] Re: STDIN encoding differs from default source file encoding — Yukihiro Matsumoto <matz@...> 2008/02/06

Hi,

[#15481] very bad character performance on ruby1.9 — "Eric Mahurin" <eric.mahurin@...>

I'd like to bring up the issue of how characters are represented in

16 messages 2008/02/10

[#15528] Test::Unit maintainer — Kouhei Sutou <kou@...>

Hi Nathaniel, Ryan,

22 messages 2008/02/13

[#15551] Proc#curry — ts <decoux@...>

21 messages 2008/02/14
[#15557] Re: [1.9] Proc#curry — David Flanagan <david@...> 2008/02/15

ts wrote:

[#15558] Re: [1.9] Proc#curry — Yukihiro Matsumoto <matz@...> 2008/02/15

Hi,

[#15560] Re: Proc#curry — Trans <transfire@...> 2008/02/15

[#15585] Ruby M17N meeting summary — Martin Duerst <duerst@...>

This is a rough translation of the Japanese meeting summary

19 messages 2008/02/18

[#15596] possible bug in regexp lexing — Ryan Davis <ryand-ruby@...>

current:

17 messages 2008/02/19

[#15678] Re: [ANN] MacRuby — "Rick DeNatale" <rick.denatale@...>

On 2/27/08, Laurent Sansonetti <laurent.sansonetti@gmail.com> wrote:

18 messages 2008/02/28
[#15679] Re: [ANN] MacRuby — "Laurent Sansonetti" <laurent.sansonetti@...> 2008/02/28

On Thu, Feb 28, 2008 at 6:33 AM, Rick DeNatale <rick.denatale@gmail.com> wrote:

[#15680] Re: [ANN] MacRuby — Yukihiro Matsumoto <matz@...> 2008/02/28

Hi,

[#15683] Re: [ANN] MacRuby — "Laurent Sansonetti" <laurent.sansonetti@...> 2008/02/28

On Thu, Feb 28, 2008 at 1:51 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

Re: reopen: can't change access mode from "w+" to "w"?

From: Eero Saynatkari <ruby-ml@...>
Date: 2008-02-05 20:51:47 UTC
List: ruby-core #15364
On 2008.02.06 04:30, Eero Saynatkari wrote:
> On 2008.02.06 03:00, Sam Ruby wrote:
> > require 'tmpdir'
> > 
> > save = STDOUT.dup
> > STDOUT.reopen File.open(File.join(Dir.tmpdir, "should_output_#{$$}"), "w+")
> > puts 'hi'
> > out = STDOUT.dup
> > STDOUT.reopen save
> > 
> > out.rewind
> > p out.read
> > 
> > reopen.rb:7:in `reopen': /tmp/should_output_8694 can't change access 
> > mode from "w+" to "w" (ArgumentError)
> >         from reopen.rb:7:in `<main>'
> > 
> > Is this a bug in Ruby 1.9?  
> 
> The error message is ambiguous at least. It means that for some reason,
> the backend is trying to apply the existing mode 'w+' to the stream to
> be opened and since STDOUT is 'w', failing to do so because that would
> "widen" the stream. It is a bug, probably caused by 'incorrect' use of
> freopen().
> 
> Logically, there is no reason why reopen should care about the previous
> mode of the old stream since it is just closed/discarded. freopen() does
> take a new mode which is not allowed to widen the existing mode on the
> stream but that only affects the new stream (or pointer), not the previous
> one.

Blah, exactly the wrong angle of explanation and the "analysis" was
inaccurate, too, after reading the io.c code. My apologies. The issue
is a special protection mechanism for the stdio streams.

Looks like the original change was this:

  Fri Dec 24 02:52:52 2004  Nobuyoshi Nakada  <nobu@ruby-lang.org>

    * io.c (io_reopen, rb_io_reopen): prohibit to change access mode for
      special IO ports.  [ruby-dev:25225]


And Matz reverted it later--but only in the 1.8 branch.

  Sat Dec 25 01:28:23 2004  Yukihiro Matsumoto  <matz@ruby-lang.org>

    * io.c: cancel io_reopen() change on Dec. 24th.

1.9 does not have that revert.

Anyway, the larger point stands: in my opinion, there is no reason why
#reopen should care about the existing file mode under any circumstances
and that the 1.8 behaviour is the correct one. This is a buyer beware
situation--if you #reopen stdio streams, you better make sure that
you have them stored somewhere if you want them back.

If anyone can explain where the 1.9 behaviour is desirable, I would
certainly be happy to listen. The only post I found is the ruby-dev
one that seems to reference a now-defunct or changed site (my Japanese
is not exactly stellar.)


--
Eero

In This Thread