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

ruby-changes:19881

From: yugui <ko1@a...>
Date: Mon, 6 Jun 2011 07:38:08 +0900 (JST)
Subject: [ruby-changes:19881] yugui:r31928 (ruby_1_9_2): merges a part of r31717 and a part of r31742.

yugui	2011-06-06 07:37:55 +0900 (Mon, 06 Jun 2011)

  New Revision: 31928

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

  Log:
    merges a part of r31717 and a part of r31742.
    Fixes a problem in Tk.mainloop.
    --
    * ext/tk/lib/tk.rb: hang-up at exit before calling Tk.mainloop.
    --
    * ext/tk/lib/tk.rb: fail to start Tk.mainloop (exit immediately) on
      some environment (reported on [ruby-talk:381444]).

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

Index: ruby_1_9_2/ChangeLog
===================================================================
--- ruby_1_9_2/ChangeLog	(revision 31927)
+++ ruby_1_9_2/ChangeLog	(revision 31928)
@@ -1,3 +1,12 @@
+Fri May 27 08:35:04 2011  Hidetoshi NAGAI  <nagai@a...>
+
+	* ext/tk/lib/tk.rb: hang-up at exit before calling Tk.mainloop.
+
+Tue May 24 07:06:34 2011  Hidetoshi NAGAI  <nagai@a...>
+
+	* ext/tk/lib/tk.rb: fail to start Tk.mainloop (exit immediately) on
+	  some environment (reported on [ruby-talk:381444]).
+
 Sat Jan 22 11:49:55 2011  Aaron Patterson <aaron@t...>
 
 	* ext/psych/lib/psych/visitors/to_ruby.rb: fixing merge key support
Index: ruby_1_9_2/ext/tk/lib/tk.rb
===================================================================
--- ruby_1_9_2/ext/tk/lib/tk.rb	(revision 31927)
+++ ruby_1_9_2/ext/tk/lib/tk.rb	(revision 31928)
@@ -1236,6 +1236,9 @@
           raise e
         end
 
+        interp.mainloop_abort_on_exception = true
+        Thread.current.instance_variable_set("@interp", interp)
+
         status = [nil]
         def status.value
           self[0]
@@ -1271,26 +1274,32 @@
 }
 set __initial_state_of_rubytk__ 1
 trace add variable __initial_state_of_rubytk__ unset __startup_rbtk_mainloop__
+
+# complete initializing
+ruby {TkCore::INTERP_THREAD[:interp] = TkCore::INTERP_THREAD.instance_variable_get('@interp')}
 EOS
 
         begin
           begin
             #TclTkLib.mainloop_abort_on_exception = false
+            #interp.mainloop_abort_on_exception = true
+            #Thread.current[:interp] = interp
             #Thread.current[:status].value = TclTkLib.mainloop(true)
-            interp.mainloop_abort_on_exception = true
-            Thread.current[:interp] = interp
             Thread.current[:status].value = interp.mainloop(true)
           rescue SystemExit=>e
             Thread.current[:status].value = e
           rescue Exception=>e
             Thread.current[:status].value = e
+            p e if $DEBUG
             retry if interp.has_mainwindow?
           ensure
             INTERP_MUTEX.synchronize{ INTERP_ROOT_CHECK.broadcast }
           end
 
-          #Thread.current[:status].value = TclTkLib.mainloop(false)
-          Thread.current[:status].value = interp.mainloop(false)
+          unless interp.deleted?
+            #Thread.current[:status].value = TclTkLib.mainloop(false)
+            Thread.current[:status].value = interp.mainloop(false)
+          end
 
         ensure
           # interp must be deleted before the thread for interp is dead.
@@ -1300,12 +1309,20 @@
         end
       }
 
+      # check a Tcl/Tk interpreter is initialized
       until INTERP_THREAD[:interp]
-        Thread.pass
+        # Thread.pass
+        INTERP_THREAD.run
       end
+
       # INTERP_THREAD.run
       raise INTERP_THREAD[:interp] if INTERP_THREAD[:interp].kind_of? Exception
 
+      # check an eventloop is running
+      while INTERP_THREAD.alive? && TclTkLib.mainloop_thread?.nil?
+        INTERP_THREAD.run
+      end
+
       INTERP = INTERP_THREAD[:interp]
       INTERP_THREAD_STATUS = INTERP_THREAD[:status]
 
@@ -1316,6 +1333,9 @@
           INTERP_THREAD.kill
         end
       }
+
+      # (for safety's sake) force the eventloop to run
+      INTERP_THREAD.run
     end
 
     def INTERP.__getip
@@ -1845,6 +1865,11 @@
 
       begin
         TclTkLib.set_eventloop_window_mode(true)
+
+        # force run the eventloop
+        TkCore::INTERP._eval_without_enc('update')
+        TkCore::INTERP._eval_without_enc('catch {set __initial_state_of_rubytk__}')
+        INTERP_THREAD.run
         if check_root
           INTERP_MUTEX.synchronize{
             INTERP_ROOT_CHECK.wait(INTERP_MUTEX)
@@ -1855,8 +1880,15 @@
             end
           }
         else
-          INTERP_THREAD.value
+          # INTERP_THREAD.value
+          begin
+            INTERP_THREAD.value
+          rescue Exception => e
+            raise e
+          end
         end
+      rescue Exception => e
+        raise e
       ensure
         TclTkLib.set_eventloop_window_mode(false)
       end
Index: ruby_1_9_2/version.h
===================================================================
--- ruby_1_9_2/version.h	(revision 31927)
+++ ruby_1_9_2/version.h	(revision 31928)
@@ -1,13 +1,13 @@
 #define RUBY_VERSION "1.9.2"
-#define RUBY_PATCHLEVEL 271
+#define RUBY_PATCHLEVEL 272
 #define RUBY_VERSION_MAJOR 1
 #define RUBY_VERSION_MINOR 9
 #define RUBY_VERSION_TEENY 1
 
 #define RUBY_RELEASE_YEAR 2011
-#define RUBY_RELEASE_MONTH 5
-#define RUBY_RELEASE_DAY 31
-#define RUBY_RELEASE_DATE "2011-05-31"
+#define RUBY_RELEASE_MONTH 6
+#define RUBY_RELEASE_DAY 6
+#define RUBY_RELEASE_DATE "2011-06-06"
 
 #include "ruby/version.h"
 

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

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