[#40298] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org> — "NARUSE, Yui" <naruse@...>

成瀬です。

29 messages 2010/02/03
[#40307] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org> — KOSAKI Motohiro <kosaki.motohiro@...> 2010/02/03

小崎です

[#40339] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org> — Tanaka Akira <akr@...> 2010/02/07

2010年2月3日21:07 KOSAKI Motohiro <kosaki.motohiro@gmail.com>:

[#40345] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org> — "NARUSE, Yui" <naruse@...> 2010/02/07

成瀬です。

[#40490] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org> — "NARUSE, Yui" <naruse@...> 2010/02/25

成瀬です。

[#40511] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org> — Aaron Patterson <aaron.patterson@...> 2010/02/27

2010/2/25 NARUSE, Yui <naruse@airemix.jp>:

[#40513] Re: [ruby-cvs:33760] Ruby:r26545 (trunk): Wed Feb 3 10:12:09 2010 Aaron Patterson <tenderlove@ruby-lang.org> — "U.Nakamura" <usa@...> 2010/02/27

アーロン宛

[#40317] [Bug:trunk] TCPServer#gets gets stuck — Yusuke ENDOH <mame@...>

遠藤です。

19 messages 2010/02/04
[#40371] Re: [Bug:trunk] TCPServer#gets gets stuck — Yusuke ENDOH <mame@...> 2010/02/09

遠藤です。

[#40382] [Bug:trunk] rubyspec: ObjectSpace.define_finalizer doesn't call self-referencing finalizers FAILED — Yusuke ENDOH <mame@...>

なかださんかまつもとさん

9 messages 2010/02/10

[#40418] [Feature #2746] ビルドする拡張ライブラリを configure 時に指定するための --with-exts オプション — Kenta Murata <redmine@...>

Feature #2746: ビルドする拡張ライブラリを configure 時に指定するための --with-exts オプション

11 messages 2010/02/15

[#40461] respond_to?(<protected method name>) returns true — "Akinori MUSHA" <knu@...>

 今さらかもしれませんが、 respond_to? で protected メソッドを

14 messages 2010/02/22
[#40462] Re: respond_to?(<protected method name>) returns true — Yukihiro Matsumoto <matz@...> 2010/02/23

まつもと ゆきひろです

[#40463] Re: respond_to?(<protected method name>) returns true — "Akinori MUSHA" <knu@...> 2010/02/23

At Tue, 23 Feb 2010 14:09:52 +0900,

[#40464] Re: respond_to?(<protected method name>) returns true — Yukihiro Matsumoto <matz@...> 2010/02/23

まつもと ゆきひろです

[#40467] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "NARUSE, Yui" <naruse@...>

成瀬です。

27 messages 2010/02/23
[#40468] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "Akinori MUSHA" <knu@...> 2010/02/23

At Wed, 24 Feb 2010 01:28:24 +0900,

[#40469] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "NARUSE, Yui" <naruse@...> 2010/02/23

(2010/02/24 1:57), Akinori MUSHA wrote:

[#40470] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "Akinori MUSHA" <knu@...> 2010/02/23

At Wed, 24 Feb 2010 02:07:00 +0900,

[#40472] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "NAKAMURA, Hiroshi" <nakahiro@...> 2010/02/23

2010/2/24 Akinori MUSHA <knu@idaemons.org>:

[#40473] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "Akinori MUSHA" <knu@...> 2010/02/23

At Wed, 24 Feb 2010 06:06:13 +0900,

[#40486] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "NAKAMURA, Hiroshi" <nakahiro@...> 2010/02/25

MjAxMC8yLzI0IEFraW5vcmkgTVVTSEEgPGtudUBpZGFlbW9ucy5vcmc+Ogo+PiAbJEIwRTlmPWhN

[#41367] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "NAKAMURA, Hiroshi" <nakahiro@...> 2010/05/20

2010/2/25 NAKAMURA, Hiroshi <nakahiro@gmail.com>:

[#41373] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "Akinori MUSHA" <knu@...> 2010/05/20

 長いことほとんど Ruby に時間が割けておらずすみません。

[#41518] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "NAKAMURA, Hiroshi" <nakahiro@...> 2010/06/03

2010/5/20 Akinori MUSHA <knu@idaemons.org>:

[#41520] Re: [ruby-cvs:33954] Ruby:r26739 (trunk): * ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the — "NARUSE, Yui" <naruse@...> 2010/06/03

成瀬です。

[#40492] [Bug #2794] Aborted (core dumped) BUG on Ruby/DL — Takao NISHI <redmine@...>

Bug #2794: Aborted (core dumped) BUG on Ruby/DL

10 messages 2010/02/26

[ruby-dev:40451] [Bug:trunk] add explicit constraints for WONTFIX IO bug

From: Yusuke ENDOH <mame@...>
Date: 2010-02-21 15:15:18 UTC
List: ruby-dev #40451
Hi, all

I propose writing two constraints into rdoc of IO:

  - after running IO#dup, both an original IO and generated IO may
    cause "bezarre behavior" except IO#close

  - after running IO#reopen, an original IO that passed to reopen
    may cause "bezarre behavior" except IO#close

In short, it means "IO#dup should not be used" and "IO that was once
passed to IO#reopen should be just closed."
"bezarre behavior" does not mean undefined behavior (such as SEGV),
but means wrong order of reading and writing, wrong value from
IO#pos, etc.  (see Appendix)

These behaviors are caused by bug of core's wrong buffering handing.
But to fix these, we must change the structure `rb_io_t', public API
in include/ruby/io.h, resulting in binary incompatibility.
We are currently thinking that these behaviors won't cause so serious
issue to ought to be fixed with even binary incompatibility.
So I'm proposing writing the above constraints to assert WONTFIX in
the immediate future.


Please say your rebuttal if the above constraints make trouble in
"real world" example.  If valid and convincing rebuttal is come, the
issue will be fixed with breaking binary compatibility.  If not, the
above constraint statement will be added.

Answers for anticipated rebuttal:

- how to replace stdout and stderr temporarily to invoke subprocess

Use Kernel#spawn's option.

- my existing code will not work

Please fix your code.
Fixing this, *all users* will be forced to reinstall ext library
(even worse, the code of the library may need to be modified).
We are expecting rebuttals such as examples that cannot be absorbed
by Ruby-level fix or that requires all users to do more cumbersome
things.


If anyone says no objection in three days, I'll add the constraints.

Thanks,



Appendix: current bezarre behaviors of IO#dup and reopen

foo.txt
-------
A
B
C

example: first-come-first-served gets after IO#reopen (1)
---------------------------------------------------------
f1 = File.new("foo.txt")
f2 = File.new("foo.txt")
f1.reopen(f2)
p f1.gets #=> "A\n"
p f2.gets #=> nil (cannot read)

example: first-come-first-served gets after IO#reopen (2)
---------------------------------------------------------
f1 = File.new("foo.txt")
f2 = File.new("foo.txt")
f1.reopen(f2)
p f2.gets #=> "A\n"
p f1.gets #=> nil (cannot read)

example: negative value of IO#pos after IO#reopen
----------------------------------------------
f1 = File.new("foo.txt")
f2 = File.new("foo.txt")
f2.gets
f1.reopen(f2)
f2.gets
f1.rewind
p f2.pos #=> -2

example: wrong value of IO#pos after IO#dup
-------------------------------------------
f1 = File.new("foo.txt")
f2 = f1.dup()
p f1.pos  #=> 0
p f2.gets #=> "A\n"
p f1.pos  #=> 6 (neither 0 or 2)

example: IO#pos with side-effect after IO#reopen
------------------------------------------------
f1 = File.new("foo.txt")
f2 = File.new("foo.txt")
f2.gets
f1.reopen(f2)
f2.gets
p f1.pos  #=> 6
f2.pos
p f1.pos  #=> 4 (changed)

example: wrong order of reading after IO#dup
--------------------------------------------
r, w = IO.pipe
Thread.new do
  w.print "Foo\nBar"
  sleep 1
  w.print "Baz\n"
  sleep 1
  w.print "Qux\n"
end
p r.gets   #=> "Foo\n"
r2 = r.dup
p r2.gets  #=> "Baz\n" (not "BarBaz\n")
p r.gets   #=> "BarQux\n" (not "Qux\n")

example: wrong order of writing after IO#dup
--------------------------------------------
f = File.new("out.txt", "w")
f1 = File.new("foo.txt")
f2 = File.new("foo.txt")
f1.reopen(f)
f2.reopen(f)
f2.puts("foo")
f1.puts("bar")
#=> resulting "bar\nfoo\n" in out.txt, not "foo\nbar\n"

-- 
Yusuke ENDOH <mame@tsg.ne.jp>

In This Thread

Prev Next