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

ruby-changes:19792

From: yugui <ko1@a...>
Date: Tue, 31 May 2011 09:12:44 +0900 (JST)
Subject: [ruby-changes:19792] yugui:r31837 (ruby_1_9_2): merges r31623 from trunk into ruby_1_9_2.

yugui	2011-05-31 09:12:27 +0900 (Tue, 31 May 2011)

  New Revision: 31837

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

  Log:
    merges r31623 from trunk into ruby_1_9_2.
    --
    * lib/timeout.rb (Timeout#timeout): don't leak "execution expired"
      exception. [Bug #4283] [ruby-core:34534].

  Modified files:
    branches/ruby_1_9_2/ChangeLog
    branches/ruby_1_9_2/lib/timeout.rb
    branches/ruby_1_9_2/version.h

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 31836)
+++ ruby_1_9_2/ChangeLog	(revision 31837)
@@ -1,3 +1,8 @@
+Wed May 18 20:25:04 2011  KOSAKI Motohiro  <kosaki.motohiro@g...>
+
+	* lib/timeout.rb (Timeout#timeout): don't leak "execution expired"
+	  exception. [Bug #4283] [ruby-core:34534].
+
 Wed May 18 03:14:49 2011  Eric Hodel  <drbrain@s...>
 
 	* test/test_singleton.rb:  Add tests from lib/singleton.rb.  Patch by
Index: ruby_1_9_2/lib/timeout.rb
===================================================================
--- ruby_1_9_2/lib/timeout.rb	(revision 31836)
+++ ruby_1_9_2/lib/timeout.rb	(revision 31837)
@@ -44,17 +44,24 @@
     return yield(sec) if sec == nil or sec.zero?
     exception = klass || Class.new(ExitException)
     begin
-      x = Thread.current
-      y = Thread.start {
-        begin
-          sleep sec
-        rescue => e
-          x.raise e
-        else
-          x.raise exception, "execution expired" if x.alive?
+      begin
+        x = Thread.current
+        y = Thread.start {
+          begin
+            sleep sec
+          rescue => e
+            x.raise e
+          else
+            x.raise exception, "execution expired"
+          end
+        }
+        return yield(sec)
+      ensure
+        if y
+          y.kill
+          y.join # make sure y is dead.
         end
-      }
-      return yield(sec)
+      end
     rescue exception => e
       rej = /\A#{Regexp.quote(__FILE__)}:#{__LINE__-4}\z/o
       (bt = e.backtrace).reject! {|m| rej =~ m}
@@ -66,11 +73,6 @@
       raise if klass            # if exception class is specified, it
                                 # would be expected outside.
       raise Error, e.message, e.backtrace
-    ensure
-      if y and y.alive?
-        y.kill
-        y.join # make sure y is dead.
-      end
     end
   end
 
Index: ruby_1_9_2/version.h
===================================================================
--- ruby_1_9_2/version.h	(revision 31836)
+++ ruby_1_9_2/version.h	(revision 31837)
@@ -1,5 +1,5 @@
 #define RUBY_VERSION "1.9.2"
-#define RUBY_PATCHLEVEL 254
+#define RUBY_PATCHLEVEL 255
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 1

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

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