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

ruby-changes:5861

From: nagai <ko1@a...>
Date: Tue, 17 Jun 2008 01:58:58 +0900 (JST)
Subject: [ruby-changes:5861] Ruby:r17368 (trunk): * ext/tk/tcltklib.c: SEGV when exit.

nagai	2008-06-17 01:54:50 +0900 (Tue, 17 Jun 2008)

  New Revision: 17368

  Modified files:
    trunk/ChangeLog
    trunk/ext/tk/lib/tk.rb
    trunk/ext/tk/sample/irbtkw.rbw
    trunk/ext/tk/tcltklib.c

  Log:
    * ext/tk/tcltklib.c: SEGV when exit.
    
    * ext/tk/lib/tk.rb: add a check for safety to Tk.exit.
    
    * ext/tk/sample/irbtkw.rbw: freezes when receives SIGINT.


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/tk/sample/irbtkw.rbw?r1=17368&r2=17367&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/tk/lib/tk.rb?r1=17368&r2=17367&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17368&r2=17367&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/tk/tcltklib.c?r1=17368&r2=17367&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 17367)
+++ ChangeLog	(revision 17368)
@@ -1,3 +1,11 @@
+Tue Jun 17 01:52:50 2008  Hidetoshi NAGAI  <nagai@a...>
+
+	* ext/tk/tcltklib.c: SEGV when exit.
+
+	* ext/tk/lib/tk.rb: add a check for safety to Tk.exit.
+
+	* ext/tk/sample/irbtkw.rbw: freezes when receives SIGINT.
+
 Mon Jun 16 21:58:38 2008  Nobuyoshi Nakada  <nobu@r...>
 
 	* ext/stringio/stringio.c (strio_each, strio_readlines): IO#each and
Index: ext/tk/sample/irbtkw.rbw
===================================================================
--- ext/tk/sample/irbtkw.rbw	(revision 17367)
+++ ext/tk/sample/irbtkw.rbw	(revision 17368)
@@ -48,10 +48,20 @@
                                                          :side=>:right, 
                                                          :expand=>false, 
                                                          :fill=>:y))
+
+# save original I/O
+out = $stdout
+err = $stderr
+
 irb_thread = nil
 ev_loop = Thread.new{
-  Tk.mainloop
-  irb_thread.kill if irb_thread
+  begin
+    Tk.mainloop
+  ensure
+    $stdout = out
+    $stderr = err
+    irb_thread.kill if irb_thread
+  end
 }
 
 # window position control
@@ -142,5 +152,5 @@
 irb_thread.join
 
 # exit
-ev_thread.kill
+ev_loop.kill
 Tk.exit
Index: ext/tk/tcltklib.c
===================================================================
--- ext/tk/tcltklib.c	(revision 17367)
+++ ext/tk/tcltklib.c	(revision 17368)
@@ -4,7 +4,7 @@
  *              Oct. 24, 1997   Y. Matsumoto
  */
 
-#define TCLTKLIB_RELEASE_DATE "2008-06-12"
+#define TCLTKLIB_RELEASE_DATE "2008-06-17"
 
 #include "ruby.h"
 
@@ -448,7 +448,7 @@
 #ifdef RUBY_USE_NATIVE_THREAD
 #define DEFAULT_EVENT_LOOP_MAX        800/*counts*/
 #define DEFAULT_NO_EVENT_TICK          10/*counts*/
-#define DEFAULT_NO_EVENT_WAIT          10/*milliseconds ( 1 -- 999 ) */
+#define DEFAULT_NO_EVENT_WAIT           1/*milliseconds ( 1 -- 999 ) */
 #define WATCHDOG_INTERVAL              10/*milliseconds ( 1 -- 999 ) */
 #define DEFAULT_TIMER_TICK              0/*milliseconds ( 0 -- 999 ) */
 #define NO_THREAD_INTERRUPT_TIME      100/*milliseconds ( 1 -- 999 ) */
@@ -1555,6 +1555,10 @@
 {
     struct timeval t;
 
+    if (no_event_wait <= 0) {
+      return Qnil;
+    }
+
     t.tv_sec = (time_t)0;
     t.tv_usec = (time_t)(no_event_wait*1000.0);
 
@@ -5096,7 +5100,7 @@
     }
 
     /* delete root widget */
-#if 1
+#if 0 /* cause SEGV on Ruby 1.9 */
     DUMP1("check `destroy'");
     if (Tcl_GetCommandInfo(ip, "destroy", &info)) {
         DUMP1("call `destroy .'");
Index: ext/tk/lib/tk.rb
===================================================================
--- ext/tk/lib/tk.rb	(revision 17367)
+++ ext/tk/lib/tk.rb	(revision 17368)
@@ -1110,7 +1110,7 @@
   extend TkComm
 
   WITH_RUBY_VM  = Object.const_defined?(:VM) && ::VM.class == Class
-  WITH_ENCODING = defined?(::Encoding.default_external)
+  WITH_ENCODING = defined?(::Encoding.default_external) && true
   #WITH_ENCODING = Object.const_defined?(:Encoding) && ::Encoding.class == Class
 
   unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD
@@ -2174,7 +2174,7 @@
   end
 
   def Tk.exit
-    tk_call_without_enc('destroy', '.')
+    TkCore::INTERP.has_mainwindow? && tk_call_without_enc('destroy', '.')
   end
 
   ################################################
@@ -5501,7 +5501,7 @@
 #Tk.freeze
 
 module Tk
-  RELEASE_DATE = '2008-06-11'.freeze
+  RELEASE_DATE = '2008-06-17'.freeze
 
   autoload :AUTO_PATH,        'tk/variable'
   autoload :TCL_PACKAGE_PATH, 'tk/variable'

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

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