[前][次][番号順一覧][スレッド一覧]

ruby-changes:23373

From: akr <ko1@a...>
Date: Sun, 22 Apr 2012 20:35:16 +0900 (JST)
Subject: [ruby-changes:23373] akr:r35424 (trunk): * lib/drb/extservm.rb (DRb::ExtServManager): don't use /bin/sh to

akr	2012-04-22 20:35:03 +0900 (Sun, 22 Apr 2012)

  New Revision: 35424

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35424

  Log:
    * lib/drb/extservm.rb (DRb::ExtServManager): don't use /bin/sh to
      invoke service subprocess.  mark detach threads for clean up.
    
    * test/drb/drbtest.rb: clean up the service subprocess in teardown.
    
    * test/drb/test_drb.rb: set @service_name for teardown.
    
    * test/drb/test_drbunix.rb: ditto.
    
    * test/drb/test_drbssl.rb: ditto.

  Modified files:
    trunk/ChangeLog
    trunk/lib/drb/extservm.rb
    trunk/test/drb/drbtest.rb
    trunk/test/drb/test_drb.rb
    trunk/test/drb/test_drbssl.rb
    trunk/test/drb/test_drbunix.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35423)
+++ ChangeLog	(revision 35424)
@@ -1,3 +1,16 @@
+Sun Apr 22 20:26:06 2012  Tanaka Akira  <akr@f...>
+
+	* lib/drb/extservm.rb (DRb::ExtServManager): don't use /bin/sh to
+	  invoke service subprocess.  mark detach threads for clean up.
+
+	* test/drb/drbtest.rb: clean up the service subprocess in teardown.
+
+	* test/drb/test_drb.rb: set @service_name for teardown.
+
+	* test/drb/test_drbunix.rb: ditto.
+
+	* test/drb/test_drbssl.rb: ditto.
+
 Sun Apr 22 07:51:29 2012  Tanaka Akira  <akr@f...>
 
 	* lib/drb/ssl.rb: close accepted TCP socket if SSL accept is failed.
Index: lib/drb/extservm.rb
===================================================================
--- lib/drb/extservm.rb	(revision 35423)
+++ lib/drb/extservm.rb	(revision 35424)
@@ -79,7 +79,15 @@
         @servers[name] = false
       end
       uri = @uri || DRb.uri
-      Process.detach spawn("#{command} #{uri} #{name}")
+      if command.respond_to? :to_ary
+        command = command.to_ary + [uri, name]
+        pid = spawn(*command)
+      else
+        pid = spawn("#{command} #{uri} #{name}")
+      end
+      th = Process.detach(pid)
+      th[:drb_service] = name
+      th
     end
   end
 end
Index: test/drb/test_drbssl.rb
===================================================================
--- test/drb/test_drbssl.rb	(revision 35423)
+++ test/drb/test_drbssl.rb	(revision 35424)
@@ -36,7 +36,8 @@
 class TestDRbSSLCore < Test::Unit::TestCase
   include DRbCore
   def setup
-    @ext = DRbSSLService.ext_service('ut_drb_drbssl.rb')
+    @service_name = 'ut_drb_drbssl.rb'
+    @ext = DRbSSLService.ext_service(@service_name)
     @there = @ext.front
   end
 
@@ -53,7 +54,8 @@
 class TestDRbSSLAry < Test::Unit::TestCase
   include DRbAry
   def setup
-    @ext = DRbSSLService.ext_service('ut_array_drbssl.rb')
+    @service_name = 'ut_array_drbssl.rb'
+    @ext = DRbSSLService.ext_service(@service_name)
     @there = @ext.front
   end
 end
Index: test/drb/test_drb.rb
===================================================================
--- test/drb/test_drb.rb	(revision 35423)
+++ test/drb/test_drb.rb	(revision 35424)
@@ -202,7 +202,8 @@
 
 class TestDRbSafe1 < TestDRbAry
   def setup
-    @ext = DRbService.ext_service('ut_safe1.rb')
+    @service_name = 'ut_safe1.rb'
+    @ext = DRbService.ext_service(@service_name)
     @there = @ext.front
   end
 end
Index: test/drb/drbtest.rb
===================================================================
--- test/drb/drbtest.rb	(revision 35423)
+++ test/drb/drbtest.rb	(revision 35424)
@@ -11,7 +11,7 @@
   @@ruby += " -d" if $DEBUG
   def self.add_service_command(nm)
     dir = File.dirname(File.expand_path(__FILE__))
-    DRb::ExtServManager.command[nm] = "#{@@ruby} \"#{dir}/#{nm}\""
+    DRb::ExtServManager.command[nm] = [@@ruby, "#{dir}/#{nm}"]
   end
 
   %w(ut_drb.rb ut_array.rb ut_port.rb ut_large.rb ut_safe1.rb ut_eval.rb ut_eq.rb).each do |nm|
@@ -65,12 +65,20 @@
 
 module DRbCore
   def setup
-    @ext = DRbService.ext_service('ut_drb.rb')
+    @service_name = 'ut_drb.rb'
+    @ext = DRbService.ext_service(@service_name)
     @there = @ext.front
   end
 
   def teardown
-    @ext.stop_service if @ext
+    @ext.stop_service if defined?(@ext) && @ext
+    DRbService.manager.unregist(@service_name)
+    Thread.list.each {|th|
+      if th.respond_to?(:pid) && th[:drb_service] == @service_name
+        Process.kill :TERM, th.pid
+        th.join
+      end
+    }
   end
 
   def test_00_DRbObject
@@ -271,12 +279,20 @@
 
 module DRbAry
   def setup
-    @ext = DRbService.ext_service('ut_array.rb')
+    @service_name = 'ut_array.rb'
+    @ext = DRbService.ext_service(@service_name)
     @there = @ext.front
   end
 
   def teardown
-    @ext.stop_service if @ext
+    @ext.stop_service if defined?(@ext) && @ext
+    DRbService.manager.unregist(@service_name)
+    Thread.list.each {|th|
+      if th.respond_to?(:pid) && th[:drb_service] == @service_name
+        Process.kill :TERM, th.pid
+        th.join
+      end
+    }
   end
 
   def test_01
Index: test/drb/test_drbunix.rb
===================================================================
--- test/drb/test_drbunix.rb	(revision 35423)
+++ test/drb/test_drbunix.rb	(revision 35424)
@@ -20,7 +20,8 @@
 class TestDRbUNIXCore < Test::Unit::TestCase
   include DRbCore
   def setup
-    @ext = DRbUNIXService.ext_service('ut_drb_drbunix.rb')
+    @service_name = 'ut_drb_drbunix.rb'
+    @ext = DRbUNIXService.ext_service(@service_name)
     @there = @ext.front
   end
 
@@ -37,7 +38,8 @@
 class TestDRbUNIXAry < Test::Unit::TestCase
   include DRbAry
   def setup
-    @ext = DRbUNIXService.ext_service('ut_array_drbunix.rb')
+    @service_name = 'ut_array_drbunix.rb'
+    @ext = DRbUNIXService.ext_service(@service_name)
     @there = @ext.front
   end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]