Revision
1950
Author
lsansonetti@apple.com
Date
2009-06-27 17:34:33 -0700 (Sat, 27 Jun 2009)

Log Message

fixed some code + added a temporary MacRuby workaround (alloy: we probably need to not merge this upstream)

Modified Paths

Diff

Modified: MacRuby/branches/experimental/spec/frozen/core/thread/fixtures/classes.rb (1949 => 1950)


--- MacRuby/branches/experimental/spec/frozen/core/thread/fixtures/classes.rb	2009-06-28 00:28:31 UTC (rev 1949)
+++ MacRuby/branches/experimental/spec/frozen/core/thread/fixtures/classes.rb	2009-06-28 00:34:33 UTC (rev 1950)
@@ -91,9 +91,10 @@
   end
   
   def self.status_of_aborting_thread
-    t = Thread.new { sleep }
+    t = Thread.new { begin; sleep; ensure; Thread.pass; end }
     begin
       Thread.critical = true if Thread.respond_to? :critical
+      Thread.pass while t.status and t.status != 'sleep'
       t.kill
       Status.new t
     ensure
@@ -135,13 +136,16 @@
   end
   
   def self.dying_thread_ensures(kill_method_name=:kill)
-    t = Thread.new do
+    # XXX MacRuby hack: work around local variable corruption because the
+    # main thread might exit before kill_method_name is used.
+    t = Thread.new(kill_method_name) do |mid|
       begin
-        Thread.current.send(kill_method_name)
+        Thread.current.send(mid)
       ensure
         yield
       end
     end
+    t
   end
   
   def self.dying_thread_with_outer_ensure(kill_method_name=:kill)