From: Makoto Kishimoto Date: 2011-07-03T17:45:42+09:00 Subject: [ruby-dev:44025] [Ruby 1.9 - Bug #4966][Open] OpenSSL まわりで GC.stress で [BUG] Issue #4966 has been reported by Makoto Kishimoto. ---------------------------------------- Bug #4966: OpenSSL まわりで GC.stress で [BUG] http://redmine.ruby-lang.org/issues/4966 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Category: ext Target version: 1.9.3 ruby -v: ruby 1.9.3dev (2011-07-03 trunk 32373) [x86_64-freebsd8.2] 私の環境で、trunk の r32371 以降で(ですが、おそらくその変更で、潜んでいたバグが顕在化した模様)以下のようなスクリプトで以下のように [BUG] になります /usr/local/lib/ruby/1.9.1/openssl/ssl-internal.rb:162: [BUG] gc_sweep(): unknown data type 0x0(0x80134fdd8) 全メッセージとバックトレースは添付ファイルにしました また、test-all が OpenSSL::TestSSL#test_parallel でこれを踏んで途中で止まります $ uname -a FreeBSD norikura.localdomain 8.2-STABLE FreeBSD 8.2-STABLE #0 r223459: Thu Jun 30 19:24:47 JST 2011 ksmakoto@norikura.localdomain:/export/obj/usr/src/sys/NORIKURA20110630 amd64 $ cat foo.rb require "openssl" require "socket" GC.stress = true tcps = nil port = 20443 begin tcps = TCPServer.new("127.0.0.1", port) rescue Errno::EADDRINUSE port += 1 retry end ssls = OpenSSL::SSL::SSLServer.new(tcps, OpenSSL::SSL::SSLContext.new) ssls.start_immediately = true Thread.new{ Thread.current.abort_on_exception = true loop{ ssls.accept } } sock = TCPSocket.new("127.0.0.1", port.to_i) ssl = OpenSSL::SSL::SSLSocket.new(sock) ssl.connect -- http://redmine.ruby-lang.org