山本です。

[ruby-dev:23380] で報告した、test/drb/test_drb.rb が SEGV する問題ですが、
テストコードを削って、再現する最小のコードを得ました。
(このメールの最後に添付します)

test_drb.rb の中の、@@ruby は、私の環境では "E:/ruby-cvs/ruby/miniruby" と
なっているのですが、下の test_drb.rb のコメントを外して
"E:/ruby-cvs/ruby/ruby.exe" とすると、正常に動くようになります。

原因まではわかってないのですが、

2004/05/19  17:05              714,752 miniruby.exe
2004/05/19  17:05               48,128 ruby.exe

というサイズの大きさから見て、static リンクだと SEGV するということは
ないでしょうか?(当て推量です)

私の環境は、Win2000SP4, bcc5.5.1

E:\ruby-cvs\ruby>ruby -v
ruby 1.9.0 (2004-05-19) [i386-bccwin32]

です。

///////////////////////////////////////////////////////
// test_drb.rb

require 'test/unit'
require 'drb/drb'
require 'drb/extservm'
begin
  loadpath = $:.dup
  $:.replace($: | [File.expand_path("../ruby", File.dirname(__FILE__))])
  require 'envutil'
ensure
  $:.replace(loadpath)
end

class DRbService
  @@manager = DRb::ExtServManager.new
  @@ruby = EnvUtil.rubybin
  @@ruby += " -d" if $DEBUG

#  @@ruby = "e:/ruby-cvs/ruby/ruby.exe"

  @@dir = File.dirname(File.expand_path(__FILE__))
  def self.add_service_command(nm)
    DRb::ExtServManager.command[nm] = "#{@@ruby} #{@@dir}/#{nm}"
  end
  add_service_command("ut_array.rb")
  DRb::DRbServer.new(nil, @@manager, {})
  def self.manager
    @@manager
  end
end

class TestDRbAry < Test::Unit::TestCase
  def setup
    @ext = DRbService.manager.service('ut_array.rb')
  end

  def teardown
    @ext.stop_service
  end

  def test_none
    # dummy
  end
end


///////////////////////////////////////////////////////
// ut_array.rb

require 'drb/drb'
require 'drb/extserv'

if __FILE__ == $0
  def ARGV.shift
    it = super()
    raise "usage: #{$0} <uri> <name>" unless it
    it
  end

  DRb.start_service(nil, [1, 2, 'III', 4, "five", 6])
  es = DRb::ExtServ.new(ARGV.shift, ARGV.shift)
  DRb.thread.join
end