[#45530] [ruby-trunk - Feature #6311][Open] memmem()によるrb_memsearch()の高速化 — "Glass_saga (Masaki Matsushita)" <glass.saga@...>

12 messages 2012/04/17

[#45554] [ruby-trunk - Bug #6344][Open] 1.9.3 p125, p194 ruby causes SEGV with test_massign.rb on ppc/ppc64 — "mtasaka (Mamoru Tasaka)" <mtasaka@...>

14 messages 2012/04/23

[ruby-dev:45542] Re: drb SSL test timeout

From: Masatoshi SEKI <m_seki@...>
Date: 2012-04-21 21:52:35 UTC
List: ruby-dev #45542
咳といいます。

On 2012/04/22, at 2:43, Tanaka Akira wrote:

> Debian wheezy において、test_drbssl.rb のテストで 100秒の timeout にひっかかります。
> また、そのとき、プロセスが残ります。


> 調べたところ、TCP の accept に成功した後、SSL の accept に失敗しているようです。
> とりあえずその状況で TCP のソケットを close すれば、
> タイムアウトじゃなくてすみやかに失敗するようにできました。
> 
> % svn diff --diff-cmd diff -x '-u -p'
> Index: lib/drb/ssl.rb
> ===================================================================
> --- lib/drb/ssl.rb	(revision 35418)
> +++ lib/drb/ssl.rb	(working copy)
> @@ -177,7 +177,11 @@ module DRb
>         break if (@acl ? @acl.allow_socket?(soc) : true)
>         soc.close
>       end
> -      ssl = @config.accept(soc)
> +      begin
> +	ssl = @config.accept(soc)
> +      ensure
> +        soc.close if $!
> +      end
>       self.class.new(uri, ssl, @config, true)
>       rescue OpenSSL::SSL::SSLError
>         warn("#{__FILE__}:#{__LINE__}: warning: #{$!.message}
> (#{$!.class})") if @config[:verbose]
> 
> この状況で TCP のソケットを close することは正しい対処だとと思うのですが、いかがでしょうか。


正しいと思います。田中さんcommitしたいただけますか?

こういうensureと$!を組み合わせるのはとても面白いですね。
例外があがるのを妨げずに、例外に気付けるのかしら。


> 
> なお、この変更後は下のように、実際の問題と思われる OpenSSL::SSL::SSLError でテストが失敗するようになります。

> 
> 
> あとこの変更では、プロセスが残るのはそのままです。
> drb が起動したプロセス (あるいは Process.detach が返したスレッド) を覚えていてくれると
> kill できるような気がするんですが、どうでしょうか。

すみません。どうしたらいいか考えます。


In This Thread