[ruby-dev:46870] Re: [ruby-changes:26796] nobu:r38848 (trunk): win32ole.rb: use TracePoint

From: SASADA Koichi <ko1@...>
Date: 2013-01-16 16:12:58 UTC
List: ruby-dev #46870
中田さん:

 この変更ですが,TracePoint をこういう目的に使って良いか自信がないので,

- win32ole は元に戻す
- テストは,win32ole が require されていたら skip する

というふうにしませんか?

 どちらかというと,svar の扱いをどうにかするか,というほうがいいかと
思っています.


(2013/01/16 18:45), nobu wrote:
> nobu	2013-01-16 18:45:48 +0900 (Wed, 16 Jan 2013)
> 
>   New Revision: 38848
> 
>   http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=38848
> 
>   Log:
>     win32ole.rb: use TracePoint
>     
>     * ext/win32ole/lib/win32ole.rb: use TracePoint to hook all thread
>       creation not only by Thread.new and to get rid of interference with
>       svar scope.  [Bug #7681] [ruby-core:51365]
> 
>   Modified files:
>     trunk/ChangeLog
>     trunk/ext/win32ole/lib/win32ole.rb
>     trunk/test/win32ole/test_thread.rb
> 
> Index: ChangeLog
> ===================================================================
> --- ChangeLog	(revision 38847)
> +++ ChangeLog	(revision 38848)
> @@ -1,3 +1,9 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1
> +Wed Jan 16 18:45:46 2013  Nobuyoshi Nakada  <nobu@ruby-lang.org>
> +
> +	* ext/win32ole/lib/win32ole.rb: use TracePoint to hook all thread
> +	  creation not only by Thread.new and to get rid of interference with
> +	  svar scope.  [Bug #7681] [ruby-core:51365]
> +
>  Wed Jan 16 09:35:53 2013  Eric Hodel  <drbrain@segment7.net>
>  
>  	* .document:  Removed extra space
> Index: ext/win32ole/lib/win32ole.rb
> ===================================================================
> --- ext/win32ole/lib/win32ole.rb	(revision 38847)
> +++ ext/win32ole/lib/win32ole.rb	(revision 38848)
> @@ -3,20 +3,5 @@ require 'win32ole.so' https://github.com/ruby/ruby/blob/trunk/ext/win32ole/lib/win32ole.rb#L3
>  # re-define Thread#initialize
>  # bug #2618(ruby-core:27634)
>  
> -class Thread
> -  alias :org_initialize :initialize
> -  def initialize(*arg, &block)
> -    if block
> -      org_initialize(*arg) {
> -        WIN32OLE.ole_initialize
> -        begin
> -          block.call(*arg)
> -        ensure
> -          WIN32OLE.ole_uninitialize
> -        end
> -      }
> -    else
> -      org_initialize(*arg)
> -    end
> -  end
> -end
> +TracePoint.trace(:thread_begin) {WIN32OLE.ole_initialize}
> +TracePoint.trace(:thread_end) {WIN32OLE.ole_uninitialize}
> Index: test/win32ole/test_thread.rb
> ===================================================================
> --- test/win32ole/test_thread.rb	(revision 38847)
> +++ test/win32ole/test_thread.rb	(revision 38848)
> @@ -9,12 +9,25 @@ if defined?(WIN32OLE) https://github.com/ruby/ruby/blob/trunk/test/win32ole/test_thread.rb#L9
>      #
>      # test for Bug #2618(ruby-core:27634)
>      #
> -    def test_creating_win32ole_object_in_thread
> -      t = Thread.new do
> -        dict = WIN32OLE.new('Scripting.Dictionary')
> -        assert(true)
> -      end
> -      t.join
> +    def assert_creating_win32ole_object_in_thread(meth)
> +      t = Thread.__send__(meth) {
> +        WIN32OLE.new('Scripting.Dictionary')
> +      }
> +      assert_nothing_raised(WIN32OLERuntimeError, "[Bug #2618] Thread.#{meth}") {
> +        t.join
> +      }
> +    end
> +
> +    def test_creating_win32ole_object_in_thread_new
> +      assert_creating_win32ole_object_in_thread(:new)
> +    end
> +
> +    def test_creating_win32ole_object_in_thread_start
> +      assert_creating_win32ole_object_in_thread(:start)
> +    end
> +
> +    def test_creating_win32ole_object_in_thread_fork
> +      assert_creating_win32ole_object_in_thread(:fork)
>      end
>    end
>  end
> 
> --
> ML: ruby-changes@quickml.atdot.net
> Info: http://www.atdot.net/~ko1/quickml/
> 


-- 
// SASADA Koichi at atdot dot net

In This Thread

Prev Next