[ruby-dev:28094] Re: ruby_1_8 Segmentation fault on Cygwin

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[ruby-dev:28094] Re: ruby_1_8 Segmentation fault on Cygwin

ocean-2
山本です。

>● 例
>test_parse_headers(TestWEBrickHTTPRequest): /var/tmp/ruby_1_8-src/lib/timeout.rb:52: [BUG] Segmentation fault
>ruby 1.8.4 (2005-12-21) [i386-cygwin]
>
>*** starting debugger for pid 648, tid 1636
>*** continuing pid 648 from debugger call (1)
>make: *** [test-all] Aborted (core dumped)
>% gdb -c test/ruby.exe.core
>GNU gdb 6.3.50_2004-12-28-cvs (cygwin-special)
>Copyright 2004 Free Software Foundation, Inc.
>GDB is free software, covered by the GNU General Public License, and you are
>welcome to change it and/or distribute copies of it under certain conditions.
>Type "show copying" to see the conditions.
>There is absolutely no warranty for GDB.  Type "show warranty" for details.
>This GDB was configured as "i686-pc-cygwin".
>
>#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
>(gdb) bt
>#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
>#1  0x77e7a030 in WaitForSingleObjectEx ()
>#2  0x77e5b3db in WaitForSingleObject ()
>#3  0x0000000c in ?? ()

webrick は yaml の前に来るはずなので、yaml の問題ではないようですね。すみません、だとすると
私にはわかりません。cygwin 特有の問題でしょうか。



Reply | Threaded
Open this post in threaded view
|

[ruby-dev:28110] Re: ruby_1_8 Segmentation fault on Cygwin

ocean-2
山本です。

>>● 例
>>test_parse_headers(TestWEBrickHTTPRequest): /var/tmp/ruby_1_8-src/lib/timeout.rb:52: [BUG] Segmentation fault
>>ruby 1.8.4 (2005-12-21) [i386-cygwin]
>>
>>*** starting debugger for pid 648, tid 1636
>>*** continuing pid 648 from debugger call (1)
>>make: *** [test-all] Aborted (core dumped)
>>% gdb -c test/ruby.exe.core
>>GNU gdb 6.3.50_2004-12-28-cvs (cygwin-special)
>>Copyright 2004 Free Software Foundation, Inc.
>>GDB is free software, covered by the GNU General Public License, and you are
>>welcome to change it and/or distribute copies of it under certain conditions.
>>Type "show copying" to see the conditions.
>>There is absolutely no warranty for GDB.  Type "show warranty" for details.
>>This GDB was configured as "i686-pc-cygwin".
>>
>>#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
>>(gdb) bt
>>#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
>>#1  0x77e7a030 in WaitForSingleObjectEx ()
>>#2  0x77e5b3db in WaitForSingleObject ()
>>#3  0x0000000c in ?? ()
>
>webrick は yaml の前に来るはずなので、yaml の問題ではないようですね。すみません、だとすると
>私にはわかりません。cygwin 特有の問題でしょうか。

[ruby-dev:28003] が関連しそうだったので、cygwin をインストールして試して
みたところ、[ruby-dev:26187] IO.select dumps core と同じ原因のようでした。

cygwin の FD_SEtSIZE は 64 と小さく、私の手元では fd == 128 のときに SEGV しました。

# gdb を使う関係で configure --disable-shared --static-linked-ext した
#
#  Breakpoint 1, ruby_connect (fd=128, sockaddr=0x1008a1d8, len=16, socks=0)
#      at ../../../ruby_1_8/ext/socket/socket.c:997
#  997                     status = wait_connectable(fd);
#
# の wait_connectable から返ったあとに SEGV

[ruby-dev:26369] のとみたさんのアイデアに倣って、とりあえずこうすると
落ちなくなりました。

Index: ext/socket/socket.c
===================================================================
RCS file: /src/ruby/ext/socket/socket.c,v
retrieving revision 1.108.2.37
diff -u -p -r1.108.2.37 socket.c
--- ext/socket/socket.c 28 Nov 2005 09:56:45 -0000 1.108.2.37
+++ ext/socket/socket.c 24 Dec 2005 04:12:27 -0000
@@ -872,6 +872,16 @@ ruby_socket(domain, type, proto)
     fd = socket(domain, type, proto);
  }
     }
+    if (fd > FD_SETSIZE) {
+ close(fd);
+ rb_gc();
+ fd = socket(domain, type, proto);
+ if (fd > FD_SETSIZE) {
+    close(fd);
+    errno = EMFILE;
+    return -1;
+ }
+    }
     return fd;
 }
 

これで test-all も通るでしょうか?(自分で試そうとしたのですが、なぜか dbm などの
make に失敗するので。。。どうも私は cygwin との相性が悪いようです)



Reply | Threaded
Open this post in threaded view
|

[ruby-dev:28111] Re: ruby_1_8 Segmentation fault on Cygwin

ocean-2
山本です。

>これで test-all も通るでしょうか?(自分で試そうとしたのですが、なぜか dbm などの
>make に失敗するので。。。どうも私は cygwin との相性が悪いようです)

補足します。個人的には、これをそのまま 1.8.4 に入れるのはリスキーだと思います。
FD_SETSIZE が 20 と極端に少ない環境を目にしたので、そういった環境で問題が起こるかも
しれません。

あと、HEAD でも試してみたところ、

993
994
e:/z.rb:5: [BUG] Segmentation fault
ruby 1.9.0 (2005-12-21) [i386-cygwin]

というように ruby_1_8 より多いもののやはり SEGV しました。


Reply | Threaded
Open this post in threaded view
|

[ruby-dev:28113] Re: ruby_1_8 Segmentation fault on Cygwin

Yukihiro Matsumoto
まつもと ゆきひろです

In message "Re: [ruby-dev:28111] Re: ruby_1_8 Segmentation fault on Cygwin"
    on Sat, 24 Dec 2005 16:18:42 +0900, H.Yamamoto <[hidden email]> writes:

|>これで test-all も通るでしょうか?(自分で試そうとしたのですが、なぜか dbm などの
|>make に失敗するので。。。どうも私は cygwin との相性が悪いようです)
|
|補足します。個人的には、これをそのまま 1.8.4 に入れるのはリスキーだと思います。
|FD_SETSIZE が 20 と極端に少ない環境を目にしたので、そういった環境で問題が起こるかも
|しれません。

まあ、もう今にもリリースされるってタイミングですからねえ。
1.9にはどうですか?

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:28114] Re: ruby_1_8 Segmentation fault on Cygwin

Kouhei Yanagita
In reply to this post by ocean-2
柳田です。

> これで test-all も通るでしょうか?(自分で試そうとしたのですが、なぜか dbm などの
> make に失敗するので。。。どうも私は cygwin との相性が悪いようです)

1.8.4 preview3 に [ruby-dev:28110] のパッチをあててみましたが、
残念ながら、私の環境では以前と同じように落ちました。


test_assert_in_delta(Test::Unit::TC_Assertions): /var/tmp/ruby-1.8.4/lib/pp.rb:454: [BUG] Segmentation fault
ruby 1.8.4 (2005-12-22) [i386-cygwin]

*** starting debugger for pid 616, tid 280
*** continuing pid 616 from debugger call (1)
make: *** [test-all] Aborted (core dumped)
% gdb -c test/ruby.exe.core
GNU gdb 6.3.50_2004-12-28-cvs (cygwin-special)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i686-pc-cygwin".

#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
(gdb) bt
#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
#1  0x77e7a030 in WaitForSingleObjectEx ()
#2  0x77e5b3db in WaitForSingleObject ()
#3  0x00000478 in ?? ()

--
Kouhei Yanagita <yanagi at shakenbu.org>

Reply | Threaded
Open this post in threaded view
|

[ruby-dev:28115] Re: ruby_1_8 Segmentation fault on Cygwin

ocean-2
In reply to this post by Yukihiro Matsumoto
山本です。1.8.4 リリースおめでとうございます。

>|>これで test-all も通るでしょうか?(自分で試そうとしたのですが、なぜか dbm などの
>|>make に失敗するので。。。どうも私は cygwin との相性が悪いようです)
>|
>|補足します。個人的には、これをそのまま 1.8.4 に入れるのはリスキーだと思います。
>|FD_SETSIZE が 20 と極端に少ない環境を目にしたので、そういった環境で問題が起こるかも
>|しれません。
>
>まあ、もう今にもリリースされるってタイミングですからねえ。
>1.9にはどうですか?

すみません、この辺りはよくわかってないので、詳しい方の議論を待ちたいです。


Reply | Threaded
Open this post in threaded view
|

[ruby-dev:28116] Re: ruby_1_8 Segmentation fault on Cygwin

ocean-2
In reply to this post by Kouhei Yanagita
山本です。

>1.8.4 preview3 に [ruby-dev:28110] のパッチをあててみましたが、
>残念ながら、私の環境では以前と同じように落ちました。
>
>
>test_assert_in_delta(Test::Unit::TC_Assertions): /var/tmp/ruby-1.8.4/lib/pp.rb:454: [BUG] Segmentation fault
>ruby 1.8.4 (2005-12-22) [i386-cygwin]
>
>*** starting debugger for pid 616, tid 280
>*** continuing pid 616 from debugger call (1)
>make: *** [test-all] Aborted (core dumped)
>% gdb -c test/ruby.exe.core
>GNU gdb 6.3.50_2004-12-28-cvs (cygwin-special)
>Copyright 2004 Free Software Foundation, Inc.
>GDB is free software, covered by the GNU General Public License, and you are
>welcome to change it and/or distribute copies of it under certain conditions.
>Type "show copying" to see the conditions.
>There is absolutely no warranty for GDB.  Type "show warranty" for details.
>This GDB was configured as "i686-pc-cygwin".
>
>#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
>(gdb) bt
>#0  0x77f88f13 in ntdll!ZwWaitForSingleObject ()
>#1  0x77e7a030 in WaitForSingleObjectEx ()
>#2  0x77e5b3db in WaitForSingleObject ()
>#3  0x00000478 in ?? ()

うーん、そうですか・・・他に原因があるんでしょうね。

# なんでも、cygwin はフルインストールする必要があるとか。私は撤退します。(--;;