[#38647] [Ruby 1.9 - Bug #5130][Open] Thread.pass sticks on OpenBSD — Yui NARUSE <naruse@...>

16 messages 2011/08/01

[#38653] [Ruby 1.9 - Bug #5135][Open] Ruby 1.9.3-preview1 tests fails in Fedora Rawhide — Vit Ondruch <v.ondruch@...>

31 messages 2011/08/01

[#38666] [Ruby 1.9 - Bug #5138][Open] Add nonblocking IO that does not use exceptions for EOF and EWOULDBLOCK — Yehuda Katz <wycats@...>

61 messages 2011/08/01
[#38667] Re: [Ruby 1.9 - Bug #5138][Open] Add nonblocking IO that does not use exceptions for EOF and EWOULDBLOCK — Aaron Patterson <aaron@...> 2011/08/01

On Tue, Aug 02, 2011 at 07:35:15AM +0900, Yehuda Katz wrote:

[#38669] Re: [Ruby 1.9 - Bug #5138][Open] Add nonblocking IO that does not use exceptions for EOF and EWOULDBLOCK — Urabe Shyouhei <shyouhei@...> 2011/08/01

(08/02/2011 07:46 AM), Aaron Patterson wrote:

[#38671] Re: [Ruby 1.9 - Bug #5138][Open] Add nonblocking IO that does not use exceptions for EOF and EWOULDBLOCK — Eric Wong <normalperson@...> 2011/08/01

Urabe Shyouhei <shyouhei@ruby-lang.org> wrote:

[#38695] [Ruby 1.9 - Bug #5144][Open] Remove GPL file from repository — Vit Ondruch <v.ondruch@...>

17 messages 2011/08/02

[#38706] [Ruby 1.9 - Bug #5147][Open] mkmf should not require static library when ruby is built with --enable-shared — Vit Ondruch <v.ondruch@...>

9 messages 2011/08/02

[#38894] Why Ruby has versioned paths? — V咜 Ondruch <v.ondruch@...>

Hello, could somebody please elaborate about reasons why Ruby uses versioned

9 messages 2011/08/10

[#38972] [Ruby 1.9 - Bug #5193][Open] ruby_thread_data_type linker errors fixed with RUBY_EXTERN — Charlie Savage <cfis@...>

28 messages 2011/08/16

[#38980] :symbol.is_a?(String) — Magnus Holm <judofyr@...>

http://viewsourcecode.org/why/redhanded/inspect/SymbolIs_aString.html

8 messages 2011/08/16

[#39025] [Ruby 1.9 - Feature #5206][Open] ruby -K should warn — Eric Hodel <drbrain@...7.net>

14 messages 2011/08/19

[#39062] Releasing r33028 as Ruby 1.9.3 RC1 — Yugui <yugui@...>

Hi,

17 messages 2011/08/23

[#39093] [Ruby 1.9 - Bug #5227][Open] Float#round fails on corner cases — Marc-Andre Lafortune <ruby-core@...>

14 messages 2011/08/24
[#39115] [Ruby 1.9 - Bug #5227][Assigned] Float#round fails on corner cases — Yui NARUSE <naruse@...> 2011/08/26

[#39126] Re: [Ruby 1.9 - Bug #5227][Assigned] Float#round fails on corner cases — Marc-Andre Lafortune <ruby-core-mailing-list@...> 2011/08/26

Hi

[#39120] [Ruby 1.9 - Bug #5233][Open] OpenSSL::SSL::SSLSocket has problems with encodings other than "ascii" — Niklas Baumstark <niklas.baumstark@...>

9 messages 2011/08/26

[#39142] [Ruby 1.9 - Bug #5239][Open] bootstraptest/runner.rb: assert_normal_exit logic broken on Debian/GNU kFreeBSD — Lucas Nussbaum <lucas@...>

11 messages 2011/08/27

[#39162] [Ruby 1.9 - Bug #5244][Open] Continuation causes Bus Error on Debian sparc — Lucas Nussbaum <lucas@...>

29 messages 2011/08/28

[ruby-core:39215] Re: [Ruby 1.9 - Bug #5237] IO.copy_stream calls #read on an object infinitely many times

From: brian ford <brixen@...>
Date: 2011-08-31 19:03:37 UTC
List: ruby-core #39215
Hi,

On Tue, Aug 30, 2011 at 8:48 PM, Motohiro KOSAKI
<kosaki.motohiro@gmail.com> wrote:
>
> Issue #5237 has been updated by Motohiro KOSAKI.
>
>
> If you are reading following paragraph,
>
>> * t end of file, it returns <code>nil</code> or <code>""</code>
>> * epend on <i>length</i>.
>> * code><i>ios</i>.read()</code> and
>> * code><i>ios</i>.read(nil)</code> returns <code>""</code>.
>> * code><i>ios</i>.read(<i>positive-integer</i>)</code> returns <code>nil</code>.
>
> you have to read following paragraph too, I think.
>
>> * f <i>length</i> is a positive integer,
>> * t try to read <i>length</i> bytes without any conversion (binary mode).
>> * t returns <code>nil</code> or a string whose length is 1 to <i>length</i> bytes.
>> * code>nil</code> means it met EOF at beginning.
>
> *AT BEGINNING*
>
> Thus, positive length destination buffer and returning nil are exclusive. Now, I don't think
> we need doc fix.
>
> but I'm not talking about a behavior change. I have no strong opinion. It's another story. I'm waiting akr-san's response.

I'm not following your explanation. The return value, whether nil or
anything else, including an empty string or any string (one byte or
not) will NOT cause the copy_stream method to return. It will loop
infinitely unless the buffer that is passed in is set to "". In fact,
I can return *anything* from #read as long as I set the buffer to "".
This is bizarre.

At the least, the rdoc should note that to participate in this API,
#read must set the buffer to "" to signal EOF. Still, in my opinion,
that is a bad API. The return value should be the sole way to signal
EOF given that the arguments to #read are optional.

sasha:rubinius2.0 brian$ cat copy_stream_bug.rb
class A
  def initialize
    @count = 0
    @read = 0
  end

  def read(bytes, buffer)
    puts buffer
    puts "read: #{@count += 1}"
    @read += 1
    case @read
    when 1
      buffer.replace "this is"
    when 2
      buffer << " a test"
    else
      buffer.replace ""
      return A.new
    end
  end
end

a = A.new
IO.copy_stream a, "copy_stream_test"
sasha:rubinius2.0 brian$ ruby -v copy_stream_bug.rb
ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]

read: 1
this is
read: 2
this is a test
read: 3


Thanks,
Brian

In This Thread

Prev Next