[#34556] /(.)(.)/.match("ab").select {|v| true } is empty — Tanaka Akira <akr@...>
以下のように、MatchData#select でブロックが常に真なのに結果
[#34567] write to broken pipe on Linux — Nobuyoshi Nakada <nobu@...>
なかだです。
まつもと ゆきひろです
なかだです。
[#34571] Re: [ruby-cvs:23495] Ruby:r16255 (ruby_1_8, trunk): * range.c (range_step): allow float step bigger than zero but less — Tanaka Akira <akr@...>
In article <200805011435.m41EZFBL003014@ci.ruby-lang.org>,
[#34605] Array#mapがEnumeratorを返さない — rubikitch@...
るびきちです。
[#34623] Marshal.load( Marshal.dump( Float ) )の不一致@1.8 — "H.Holon" <holon@...>
H.Holonです。
[#34646] break in lambda — Tanaka Akira <akr@...>
lambda 直下に break があったとき、なにごともなかったかのよう
[#34647] fork 不可能な環境での test_argv0_noarg — wanabe <s.wanabe@...>
ワナベと申します。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
須藤です。
[#34648] Bignum のメソッドからの bigzero_p — wanabe <s.wanabe@...>
ワナベと申します。
[#34676] removing Array#nitems {} — "Akinori MUSHA" <knu@...>
Array#nitems はnilでない要素を数えるメソッドですが、ブロックを
[#34691] ext/openssl and newer OpenSSL — Takahiro Kambe <taca@...>
こんにちは。
[#34692] [ruby1.9] fork と thread — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#34726] memory leak by Array#sort! — Tanaka Akira <akr@...>
以下のように、Array#sort! の中で配列を変更するとメモりリークします。
[#34739] net/imap uses Thread#raise — Tanaka Akira <akr@...>
net/imap が原因だと思うのですが、
前田です。
In article <704d5db90805210204o7aa80c00lfeb13a34230c2c03@mail.gmail.com>,
なかだです。
[#34741] Date.parse("##-##-##") — "Akinori MUSHA" <knu@...>
Date.parse("##.##.##") の ruby_1_8 における挙動が trunk とも
> Date.parse("##.##.##") の ruby_1_8 における挙動が trunk とも
[#34742] Ruby 1.8.7-preview3 has been released — "Akinori MUSHA" <knu@...>
Ruby 1.8.7-preview3 をリリースしました。
お疲れ様です。
At Mon, 19 May 2008 11:28:10 +0900,
In message <86k5hrow30.knu@iDaemons.org>
もう一つ追加です。
At Mon, 19 May 2008 18:55:42 +0900,
[#34751] benchmark result of reverse_complement — SASADA Koichi <ko1@...>
ささだです.
[#34758] Re: [ruby-cvs:23717] Ruby:r16477 (trunk): * regparse.c (PINC): use optimized enclen() instead of — SASADA Koichi <ko1@...>
ささだです.
遠藤と申します。
[#34768] Improvement of lazy sweep patch — authorNari <authornari@...>
authorNariです。
まつもと ゆきひろです
[#34775] (1..5).step(SimpleDelegator.new(1.5)) {|x| p x} differ from (1..5).step(1.5) {|x| p x} — Tanaka Akira <akr@...>
以下のように (1..5).step(1.5) {|x| p x} と
[#34800] Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...>
木村です。
こんにちは、なかむら(う)です。
木村です。
木村です。
こんにちは、なかむら(う)です。
木村です。
こんにちは、なかむら(う)です。
[#34810] -Wall — SASADA Koichi <ko1@...>
ささだです.
[#34830] return value of pp — "Yusuke ENDOH" <mame@...>
遠藤です。
[#34877] [Ruby 1.9 - Bug #11] prelude.c compilation problem on mswin32 — redmine@...
Issue #11 has been updated by Usaku NAKAMURA.
[#34883] [#19002] RUBY_* constants — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
[#34889] Ruby 1.8.7-preview4 test-all failed in OpenSSL::TestSSL — Nobuhiro IMAI <nov@...>
いまいです。
Nobuhiro IMAI さんは書きました:
At Sat, 31 May 2008 21:06:47 +0900,
この話題についていろいろ試していて気付いたのですが
[ruby-dev:34578] Re: write to broken pipe on Linux
なかだです。
At Fri, 2 May 2008 16:27:45 +0900,
Yukihiro Matsumoto wrote in [ruby-dev:34574]:
> EPIPEやENOTCONNが発生したfdをselectに渡すとふたたびそれらが発
> 生するべきであると(たとえば)POSIX的に明示されているのであれば、
> linux固有のバグと認定して、当面、場当たり的な対応をするとかも
> ありえるとは思うのですが。
そこまでは規定されていないような気がします。
> |shutdownでは、EPIPEの代わりにENOTCONNが発生するようになるだけで
> |その次の書き込みでやはりブロックしてしまうようです。closeにする
> |とEBADFにはなるのですが、eof?やcloseでも同じくEBADFが発生してし
> |まうようになります。他のスレッドの有無によって動作が変わってしま
> |うのもどうかという気もしますが。
>
> はじめに立ち返って考えると、読み出そうとした時にEPIPEが返っ
> てきてしまったIOに対してどのように対処すべきなんでしょうね。
> BROKENPIPEフラグを立てる、というのもあんまり正しい対処のよう
> には思えないんですが。やはり強制的にcloseして例外かなあ。
ですかねぇ。
> |というか、1.9ではすでにblocking regionを使えばselectは必要ないは
> |ずです。
>
> 1.9ではその方向で対応しましょうか。
1.8が問題ですね。とりあえず試してみたんですが、deadlockになって
しまいました。
# 法事で不在のため、5/5までIP unreachable。
Index: eval.c
===================================================================
--- eval.c (revision 16276)
+++ eval.c (working copy)
@@ -10930,4 +10930,11 @@ rb_thread_schedule()
#endif
FOREACH_THREAD_FROM(curr, th) {
+ if ((th->wait_for&WAIT_FD) && FD_ISSET(th->fd, &readfds)) {
+ FD_CLR(th->fd, &readfds);
+ th->status = THREAD_RUNNABLE;
+ th->select_value = n;
+ n = max;
+ found = 1;
+ }
if (th->wait_for & WAIT_SELECT) {
int v = 0;
@@ -10937,6 +10944,8 @@ rb_thread_schedule()
v |= find_bad_fds(&exceptfds, &th->exceptfds, th->fd);
if (v) {
+ th->status = THREAD_RUNNABLE;
th->select_value = n;
n = max;
+ found = 1;
}
}
@@ -11019,5 +11028,5 @@ rb_thread_schedule()
th->thread, thread_status_name(th->status));
if (th->wait_for & WAIT_FD) warn_printf("F(%d)", th->fd);
- if (th->wait_for & WAIT_SELECT) warn_printf("S");
+ if (th->wait_for & WAIT_SELECT) warn_printf("S(%d)", th->fd);
if (th->wait_for & WAIT_TIME) warn_printf("T(%f)", th->delay);
if (th->wait_for & WAIT_JOIN)
Index: io.c
===================================================================
--- io.c (revision 16276)
+++ io.c (working copy)
@@ -351,4 +351,5 @@ io_fflush(f, fptr)
int n;
+ rb_io_check_closed(fptr);
if (!rb_thread_fd_writable(fileno(f))) {
rb_io_check_closed(fptr);
@@ -388,4 +389,8 @@ rb_io_wait_readable(f)
return Qtrue;
+ case EPIPE:
+ close(f);
+ return Qfalse;
+
default:
return Qfalse;
@@ -416,4 +421,8 @@ rb_io_wait_writable(f)
return Qtrue;
+ case EPIPE:
+ close(f);
+ return Qfalse;
+
default:
return Qfalse;
@@ -1724,5 +1733,5 @@ rb_io_getline(rs, io)
while ((c = appendline(fptr, newline, &str)) != EOF &&
(c != newline || RSTRING(str)->len < rslen ||
- (rspara || rscheck(rsptr,rslen,rs), 0) ||
+ ((rspara || rscheck(rsptr,rslen,rs)) && 0) ||
memcmp(RSTRING(str)->ptr+RSTRING(str)->len-rslen,rsptr,rslen)));
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦