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

ruby-changes:14680

From: nagai <ko1@a...>
Date: Mon, 1 Feb 2010 07:53:23 +0900 (JST)
Subject: [ruby-changes:14680] Ruby:r26532 (ruby_1_8): * ext/tk/tkutil/tkutil.c: fix SEGV on TkUtil::CallbackSubst._setup_subst_table.

nagai	2010-02-01 07:51:37 +0900 (Mon, 01 Feb 2010)

  New Revision: 26532

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

  Log:
    * ext/tk/tkutil/tkutil.c: fix SEGV on TkUtil::CallbackSubst._setup_subst_table.
    * ext/tk/lib/tk.rb: [POTENTIAL INCOMPATIBLE] return NoMethodError
      for TkWindow#to_ary and to_str.
    * ext/tk/lib/tkextlib/tcllib/plotchart.rb: wrong arguments.
    * ext/tk/sampel/tkballoonhelp.rb: fail to support TkEntry widgets.

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/ext/tk/lib/tk.rb
    branches/ruby_1_8/ext/tk/lib/tkextlib/tcllib/plotchart.rb
    branches/ruby_1_8/ext/tk/sample/tkballoonhelp.rb
    branches/ruby_1_8/ext/tk/tkutil/tkutil.c

Index: ruby_1_8/ext/tk/sample/tkballoonhelp.rb
===================================================================
--- ruby_1_8/ext/tk/sample/tkballoonhelp.rb	(revision 26531)
+++ ruby_1_8/ext/tk/sample/tkballoonhelp.rb	(revision 26532)
@@ -111,12 +111,24 @@
     @frame.deiconify
     @frame.raise
 
-    @org_cursor = @parent['cursor']
-    @parent.cursor('crosshair')
+    begin
+      @org_cursor = @parent.cget('cursor')
+    rescue
+      @org_cursor = @parent['cursor']
+    end
+    begin
+      @parent.configure('cursor', 'crosshair')
+    rescue
+      @parent.cursor('crosshair')
+    end
   end
 
   def erase
-    @parent.cursor(@org_cursor)
+    begin
+      @parent.configure('cursor', @org_cursor)
+    rescue
+      @parent.cursor(@org_cursor)
+    end
     @frame.withdraw
   end
 
Index: ruby_1_8/ext/tk/lib/tk.rb
===================================================================
--- ruby_1_8/ext/tk/lib/tk.rb	(revision 26531)
+++ ruby_1_8/ext/tk/lib/tk.rb	(revision 26532)
@@ -1174,6 +1174,8 @@
       opts = ''
     end
 
+    # RUN_EVENTLOOP_ON_MAIN_THREAD = true
+
     unless self.const_defined? :RUN_EVENTLOOP_ON_MAIN_THREAD
       if WITH_RUBY_VM ### check Ruby 1.9 !!!!!!!
         # *** NEED TO FIX ***
@@ -1275,6 +1277,14 @@
 
       INTERP = INTERP_THREAD[:interp]
       INTERP_THREAD_STATUS = INTERP_THREAD[:status]
+
+      # delete the interpreter and kill the eventloop thread at exit
+      END{
+        if INTERP_THREAD.alive?
+          INTERP.delete
+          INTERP_THREAD.kill
+        end
+      }
     end
 
     def INTERP.__getip
@@ -4890,7 +4900,7 @@
       begin
         cget(name)
       rescue
-        if self.kind_of?(TkWindow)
+        if self.kind_of?(TkWindow) && name != "to_ary" && name != "to_str"
           fail NameError,
                "unknown option '#{id}' for #{self.inspect} (deleted widget?)"
         else
Index: ruby_1_8/ext/tk/lib/tkextlib/tcllib/plotchart.rb
===================================================================
--- ruby_1_8/ext/tk/lib/tkextlib/tcllib/plotchart.rb	(revision 26531)
+++ ruby_1_8/ext/tk/lib/tkextlib/tcllib/plotchart.rb	(revision 26532)
@@ -145,8 +145,8 @@
     list(tk_call_without_enc('::Plotchart::coordsToPixel', w.path, x, y))
   end
 
-  def self.determine_scale(w, xmax, ymax)
-    tk_call_without_enc('::Plotchart::determineScale', w.path, xmax, ymax)
+  def self.determine_scale(*args) # (xmin, xmax, inverted=false)
+    tk_call_without_enc('::Plotchart::determineScale', *args)
   end
 
   def self.set_zoom_pan(w)
Index: ruby_1_8/ext/tk/tkutil/tkutil.c
===================================================================
--- ruby_1_8/ext/tk/tkutil/tkutil.c	(revision 26531)
+++ ruby_1_8/ext/tk/tkutil/tkutil.c	(revision 26532)
@@ -1167,8 +1167,8 @@
     }
 }
 
-static struct cbsubst_info *
-allocate_cbsubst_info()
+static VALUE
+allocate_cbsubst_info(struct cbsubst_info **inf_ptr)
 {
   struct cbsubst_info *inf;
   volatile VALUE proc, aliases;
@@ -1191,15 +1191,16 @@
   aliases = rb_hash_new();
   inf->aliases = aliases;
 
-  return inf;
+  if (inf_ptr != (struct cbsubst_info **)NULL) *inf_ptr = inf;
+
+  return Data_Wrap_Struct(cSUBST_INFO, subst_mark, subst_free, inf);
 }
 
 static void
 cbsubst_init()
 {
-    rb_const_set(cCB_SUBST, ID_SUBST_INFO, 
-		 Data_Wrap_Struct(cSUBST_INFO, subst_mark, subst_free, 
-				  allocate_cbsubst_info()));
+  rb_const_set(cCB_SUBST, ID_SUBST_INFO, 
+	       allocate_cbsubst_info((struct cbsubst_info **)NULL));
 }
 
 static VALUE
@@ -1517,6 +1518,7 @@
      VALUE *argv;
      VALUE self;
 {
+  volatile VALUE cbsubst_obj;
   volatile VALUE key_inf;
   volatile VALUE longkey_inf;
   volatile VALUE proc_inf;
@@ -1538,7 +1540,7 @@
   }
 
   /* init */
-  subst_inf = allocate_cbsubst_info();
+  cbsubst_obj = allocate_cbsubst_info(&subst_inf);
 
   /*
    * keys : array of [subst, type, ivar]
@@ -1625,9 +1627,7 @@
 		 RARRAY_PTR(inf)[1]);
   }
 
-  rb_const_set(self, ID_SUBST_INFO, 
-	       Data_Wrap_Struct(cSUBST_INFO, subst_mark, 
-				subst_free, subst_inf));
+  rb_const_set(self, ID_SUBST_INFO, cbsubst_obj);
 
   return self;
 }
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 26531)
+++ ruby_1_8/ChangeLog	(revision 26532)
@@ -1,3 +1,14 @@
+Mon Feb  1 07:36:33 2010  Hidetoshi NAGAI  <nagai@a...>
+
+	* ext/tk/tkutil/tkutil.c: fix SEGV on TkUtil::CallbackSubst._setup_subst_table.
+
+	* ext/tk/lib/tk.rb: [POTENTIAL INCOMPATIBLE] return NoMethodError
+	  for TkWindow#to_ary and to_str.
+
+	* ext/tk/lib/tkextlib/tcllib/plotchart.rb: wrong arguments.
+
+	* ext/tk/sampel/tkballoonhelp.rb: fail to support TkEntry widgets.
+
 Wed Jan 27 14:25:12 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* eval.c (thread_init): used only for setitimer or threaded.

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

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