[#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! の中で配列を変更するとメモりリークします。
[#34727] バックスラッシュを含むsub/gsubの挙動 — "keisuke fukuda" <keisukefukuda@...>
はじめまして。福田と申します。
[#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@...>
木村です。
こんにちは、なかむら(う)です。
木村です。
木村です。
こんにちは、なかむら(う)です。
木村です。
こんにちは、なかむら(う)です。
[#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:34567] write to broken pipe on Linux
なかだです。
http://rryu.sakura.ne.jp/nisenise-fuhito/2008/04/22/950.html と
か(見落としてましたが)[ruby-list:43356]にある、接続が切れたソケッ
トに書き込もうとすると、二度目以降selectの待ち状態から抜けなくな
る問題のパッチです。rb_io_wait_{read,writ}able()の互換性がなくなっ
てしまうのが気になるので、名前を変えたほうがいいかもしれませんが、
どういうのがいいですかねぇ。
Index: include/ruby/io.h
===================================================================
--- include/ruby/io.h (revision 16258)
+++ include/ruby/io.h (working copy)
@@ -61,4 +61,5 @@ typedef struct rb_io_t {
#define FMODE_TTY 16
#define FMODE_DUPLEX 32
+#define FMODE_BROKENPIPE 256
#define FMODE_WSPLIT 0x200
#define FMODE_WSPLIT_INITIALIZED 0x400
@@ -107,6 +108,6 @@ void rb_io_synchronized(rb_io_t*);
void rb_io_check_initialized(rb_io_t*);
void rb_io_check_closed(rb_io_t*);
-int rb_io_wait_readable(int);
-int rb_io_wait_writable(int);
+int rb_io_wait_readable(rb_io_t*);
+int rb_io_wait_writable(rb_io_t*);
void rb_io_set_nonblock(rb_io_t *fptr);
Index: io.c
===================================================================
--- io.c (revision 16258)
+++ io.c (working copy)
@@ -419,4 +419,10 @@ rb_io_check_writable(rb_io_t *fptr)
rb_raise(rb_eIOError, "not opened for writing");
}
+#ifdef __linux__
+ if (fptr->mode & FMODE_BROKENPIPE) {
+ errno = EPIPE;
+ rb_sys_fail(0);
+ }
+#endif
if (fptr->rbuf_len) {
io_unread(fptr);
@@ -590,5 +596,5 @@ io_fflush(rb_io_t *fptr)
errno = EAGAIN;
}
- if (rb_io_wait_writable(fptr->fd)) {
+ if (rb_io_wait_writable(fptr)) {
rb_io_check_closed(fptr);
goto retry;
@@ -608,7 +614,8 @@ wait_readable(VALUE p)
int
-rb_io_wait_readable(int f)
+rb_io_wait_readable(rb_io_t *fptr)
{
rb_fdset_t rfds;
+ int f = fptr->fd;
switch (errno) {
@@ -650,7 +657,8 @@ wait_writable(VALUE p)
int
-rb_io_wait_writable(int f)
+rb_io_wait_writable(rb_io_t *fptr)
{
rb_fdset_t wfds;
+ int f = fptr->fd;
switch (errno) {
@@ -676,4 +684,7 @@ rb_io_wait_writable(int f)
return Qtrue;
+ case EPIPE:
+ fptr->mode |= FMODE_BROKENPIPE;
+
default:
return Qfalse;
@@ -752,5 +763,5 @@ io_fwrite(VALUE str, rb_io_t *fptr)
errno = EAGAIN;
}
- if (rb_io_wait_writable(fptr->fd)) {
+ if (rb_io_wait_writable(fptr)) {
rb_io_check_closed(fptr);
if (offset < RSTRING_LEN(str))
@@ -1038,5 +1049,5 @@ io_fillbuf(rb_io_t *fptr)
}
if (r < 0) {
- if (rb_io_wait_readable(fptr->fd))
+ if (rb_io_wait_readable(fptr))
goto retry;
rb_sys_fail(fptr->path);
@@ -1480,5 +1491,5 @@ io_getpartial(int argc, VALUE *argv, VAL
}
if (n < 0) {
- if (!nonblock && rb_io_wait_readable(fptr->fd))
+ if (!nonblock && rb_io_wait_readable(fptr))
goto again;
rb_sys_fail(fptr->path);
Index: ext/socket/socket.c
===================================================================
--- ext/socket/socket.c (revision 16258)
+++ ext/socket/socket.c (working copy)
@@ -525,5 +525,5 @@ bsock_send(int argc, VALUE *argv, VALUE
}
if (n < 0) {
- if (rb_io_wait_writable(fd)) {
+ if (rb_io_wait_writable(fptr)) {
goto retry;
}
@@ -1809,5 +1809,5 @@ udp_send(int argc, VALUE *argv, VALUE so
return INT2FIX(n);
}
- if (rb_io_wait_writable(fptr->fd)) {
+ if (rb_io_wait_writable(fptr)) {
goto retry;
}
Index: ext/openssl/ossl_ssl.c
===================================================================
--- ext/openssl/ossl_ssl.c (revision 16258)
+++ ext/openssl/ossl_ssl.c (working copy)
@@ -951,8 +951,8 @@ ossl_start_ssl(VALUE self, int (*func)()
switch((ret2 = ssl_get_error(ssl, ret))){
case SSL_ERROR_WANT_WRITE:
- rb_io_wait_writable(FPTR_TO_FD(fptr));
+ rb_io_wait_writable(fptr);
continue;
case SSL_ERROR_WANT_READ:
- rb_io_wait_readable(FPTR_TO_FD(fptr));
+ rb_io_wait_readable(fptr);
continue;
case SSL_ERROR_SYSCALL:
@@ -1033,8 +1033,8 @@ ossl_ssl_read(int argc, VALUE *argv, VAL
rb_eof_error();
case SSL_ERROR_WANT_WRITE:
- rb_io_wait_writable(FPTR_TO_FD(fptr));
+ rb_io_wait_writable(fptr);
continue;
case SSL_ERROR_WANT_READ:
- rb_io_wait_readable(FPTR_TO_FD(fptr));
+ rb_io_wait_readable(fptr);
continue;
case SSL_ERROR_SYSCALL:
@@ -1081,8 +1081,8 @@ ossl_ssl_write(VALUE self, VALUE str)
goto end;
case SSL_ERROR_WANT_WRITE:
- rb_io_wait_writable(FPTR_TO_FD(fptr));
+ rb_io_wait_writable(fptr);
continue;
case SSL_ERROR_WANT_READ:
- rb_io_wait_readable(FPTR_TO_FD(fptr));
+ rb_io_wait_readable(fptr);
continue;
case SSL_ERROR_SYSCALL:
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦