Forum: Ruby segfault with tk.rb

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Wybo D. (Guest)
on 2006-03-29 02:24
(Received via mailing list)
This works OK:

     #!/usr/bin/ruby

     require 'tk'
     class TkVariable
       def to_m
         "%.2f" % [self.to_i.abs/100.0]
       end
     end
     puts TkVariable.new(12345).to_m

     -> 123.45

But when I add the -w option to the first line, I get:

/usr/local/lib/ruby/1.8/tk.rb:2313: warning: redefine encoding=
/usr/local/lib/ruby/1.8/tk.rb:2316: warning: redefine encoding
123.45
Segmentation fault

and this takes 45 seconds.
What's wrong?
Hidetoshi NAGAI (Guest)
on 2006-03-29 09:02
(Received via mailing list)
From: Wybo D. <removed_email_address@domain.invalid>
Subject: segfault with tk.rb
Date: Wed, 29 Mar 2006 07:23:55 +0900
Message-ID: <removed_email_address@domain.invalid>
> But when I add the -w option to the first line, I get:
>
> /usr/local/lib/ruby/1.8/tk.rb:2313: warning: redefine encoding=
> /usr/local/lib/ruby/1.8/tk.rb:2316: warning: redefine encoding
> 123.45
> Segmentation fault
>
> and this takes 45 seconds.
> What's wrong?

I cannot cause SEGV on my Linux box.
Probably, we need more information to solve your trouble.
Wybo D. (Guest)
on 2006-03-29 12:44
(Received via mailing list)
n Wed, 29 Mar 2006, Hidetoshi NAGAI wrote:

> I cannot cause SEGV on my Linux box.
> Probably, we need more information to solve your trouble.

what would you suggest me to do?

I tried the profiler:
     #!/usr/bin/ruby -w
     require 'profiler'

     require 'tk'
     class TkVariable
       def to_m
         "%.2f" % [self.to_i.abs/100.0]
       end
     end

     Profiler__::start_profile
     begin
       puts TkVariable.new(12345).to_m
     rescue
       Profiler__::stop_profile
       Profiler__::print_profile($stdout)
     end

but then the problem is gone.

I also tried -rdebug, but then I first get, as I always do when using
tk.rb, a Runtime Error: can't unset "v00000": no such variable, and then
when I continue, the problem is gone again:

$ ruby -rdebug t
Debug.rb
Emacs support available.

t:3:require 'tk'
(rdb:1) c
/usr/local/lib/ruby/1.8/tk.rb:2313: warning: redefine encoding=
/usr/local/lib/ruby/1.8/tk.rb:2316: warning: redefine encoding
/usr/local/lib/ruby/1.8/tk/variable.rb:290: `can't unset "v00000": no
such variable' (RuntimeError)
         from /usr/local/lib/ruby/1.8/tk/variable.rb:290:in `initialize'
         from t:11
/usr/local/lib/ruby/1.8/tk/variable.rb:290:
INTERP._unset_global_var(@id)
(rdb:1)
c
123.45
Hidetoshi NAGAI (Guest)
on 2006-03-30 03:37
(Received via mailing list)
From: Wybo D. <removed_email_address@domain.invalid>
Subject: Re: segfault with tk.rb
Date: Wed, 29 Mar 2006 17:43:43 +0900
Message-ID: <removed_email_address@domain.invalid>
> what would you suggest me to do?

Oh, I'm sorry.
SEGV trouble on Ruby/Tk depends on tcltklib.so.
# Of course, if the trouble realy depends on Ruby/Tk. ;-)
To check the reason, information of your environment
(OS, nativethread suuport, library verion, and so on) are required.

If you can, please report the followings.

# If you can also, please try the latest tcltklib.

  * ruby version
  * configure options
  * result of 'ruby -r tk -e 'p Tk::TK_PATCHLEVEL; p Tk::PLATFORM'
  * [depends on your OS] result of ldd your 'ruby' and 'tcltklib.so'
      e.g. $ ldd /usr/local/lib/ruby/1.8/i686-linux/tcltklib.so
           linux-gate.so.1 =>  (0xffffe000)
           libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0xb7e3d000)
           libdl.so.2 => /lib/libdl.so.2 (0xb7e2c000)
           libpthread.so.0 => /lib/i686/libpthread.so.0 (0xb7ddb000)
           libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7dae000)
           libm.so.6 => /lib/i686/libm.so.6 (0xb7d8b000)
           libc.so.6 => /lib/i686/libc.so.6 (0xb7c51000)
           /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
  * information which you think useful to solve the trouble :-)

Anyway, the follwoing wraning and error are expecetd.
Those have no problem, but the exception may cause SEGV.
However, I think such troubles on exception are fixed on ruby 1.8.3
or later. If no case of troubles is escaped notice.

From: Wybo D. <removed_email_address@domain.invalid>
Subject: Re: segfault with tk.rb
Date: Wed, 29 Mar 2006 17:43:43 +0900
Message-ID: <removed_email_address@domain.invalid>
Wybo D. (Guest)
on 2006-03-31 16:04
(Received via mailing list)
On Thu, 30 Mar 2006, Hidetoshi NAGAI wrote:

> # If you can also, please try the latest tcltklib.
I suppose it *is* the latest, as it comes with ruby-1.8.4?

>  * ruby version

ruby 1.8.4 (2005-12-24) [i686-linux]

>  * configure options

none

>  * result of 'ruby -r tk -e 'p Tk::TK_PATCHLEVEL; p Tk::PLATFORM'

"8.4.7"
{"wordSize"=>"4", "user"=>"root", "machine"=>"i686", "platform"=>"unix",
"osVersion"=>"2.6.8-24.20-default", "os"=>"Linux",
"byteOrder"=>"littleEndian"}

>  * [depends on your OS] result of ldd your 'ruby' and 'tcltklib.so'

wybo>ldd /usr/local/bin/ruby
         linux-gate.so.1 =>  (0xffffe000)
         libdl.so.2 => /lib/libdl.so.2 (0x4002d000)
         libcrypt.so.1 => /lib/libcrypt.so.1 (0x40032000)
         libm.so.6 => /lib/tls/libm.so.6 (0x40064000)
         libc.so.6 => /lib/tls/libc.so.6 (0x40087000)
         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
wybo>ldd /usr/local/lib/ruby/1.8/i686-linux/tcltklib.so
         linux-gate.so.1 =>  (0xffffe000)
         libtk8.4.so => /usr/lib/libtk8.4.so (0x40029000)
         libtcl8.4.so => /usr/lib/libtcl8.4.so (0x40104000)
         libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x401ac000)
         libdl.so.2 => /lib/libdl.so.2 (0x402a8000)
         libcrypt.so.1 => /lib/libcrypt.so.1 (0x402ac000)
         libm.so.6 => /lib/tls/libm.so.6 (0x402de000)
         libc.so.6 => /lib/tls/libc.so.6 (0x40301000)
         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)

OS: SuSE-9.2 kept up to date with its online update tool.

test prog:
#!/usr/local/bin/ruby -w
require 'tk'
class TkVariable
   def to_m
     "%.2f" % [self.to_i.abs/100.0]
   end
end
puts TkVariable.new(12345).to_m

Hope that helps...
Hidetoshi NAGAI (Guest)
on 2006-04-01 05:02
(Received via mailing list)
Thank you for your report.
I think that depends on the finalize operation of a Tk interpreter
when Ruby is exiting.
But now, I have no time to fix the problem.
If you can, please comment out all part of ip_finalize(ip) in
tcltklib.c and try to use it.
Probably, it causes some problems when the running Ruby releases
Tk IP objects.
However, on your case, you may be able to avoid the SEGV trouble.
Hidetoshi NAGAI (Guest)
on 2006-04-05 20:28
(Received via mailing list)
From: Hidetoshi NAGAI <removed_email_address@domain.invalid>
Subject: Re: segfault with tk.rb
Date: Sat, 1 Apr 2006 09:59:27 +0900
Message-ID: <removed_email_address@domain.invalid>
> Thank you for your report.
> I think that depends on the finalize operation of a Tk interpreter
> when Ruby is exiting.
> But now, I have no time to fix the problem.

I'd try to fix the problem. The diff of ruby_1_8 branch is
<http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/e....
Could you try it?
Wybo D. (Guest)
on 2006-04-10 13:09
(Received via mailing list)
On Thu, 6 Apr 2006, Hidetoshi NAGAI wrote:

> 
<http://www.ruby-lang.org/cgi-bin/cvsweb.cgi/ruby/e....
> Could you try it?

Sorry for being so late with my reaction. Had other troubles and
also had to find out how to get 1.8.4 from cvs.

It does not seem to work. What I did was:

cvs -z4 -d :pserver:removed_email_address@domain.invalid:/src checkout -r
ruby_1_8 ruby
patch -p0 <patch
# -> patching file ruby/ext/tk/tcltklib.c
#    Reversed (or previously applied) patch detected!  Assume -R? [n] y
#    Hunk #5 succeeded at 4375 (offset 5 lines).
#    Hunk #6 succeeded at 4385 (offset 5 lines).
#    Hunk #7 succeeded at 4404 (offset 5 lines).
#    Hunk #8 succeeded at 4414 (offset 5 lines).
#    Hunk #9 succeeded at 4472 (offset 5 lines).
#    Hunk #10 succeeded at 4915 (offset 5 lines).
#    Hunk #11 succeeded at 6197 (offset 5 lines).
#    Hunk #12 succeeded at 6376 (offset 5 lines).
#    Hunk #13 succeeded at 7934 (offset 5 lines).
cd ruby
autoconf
./configure
make
./ruby ../warntest
./ruby -w ../warntest

where warntest contained:

require 'tk'
class TkVariable
   def to_m
     "%.2f" % [self.to_i.abs/100.0]
   end
end
puts TkVariable.new(12345).to_m

The first run on warntest worked fine.
But the ruby -w ../warntest gave the old problem: very heavy system load
ending in a segmentation fault.
Hidetoshi NAGAI (Guest)
on 2006-04-10 17:26
(Received via mailing list)
From: Wybo D. <removed_email_address@domain.invalid>
Subject: Re: segfault with tk.rb
Date: Mon, 10 Apr 2006 11:05:52 +0200 (CEST)
Message-ID: <removed_email_address@domain.invalid>
> Sorry for being so late with my reaction. Had other troubles and
> also had to find out how to get 1.8.4 from cvs.
>
> It does not seem to work. What I did was:
>
> cvs -z4 -d :pserver:removed_email_address@domain.invalid:/src checkout -r ruby_1_8 ruby
> patch -p0 <patch
> # -> patching file ruby/ext/tk/tcltklib.c
> #    Reversed (or previously applied) patch detected!  Assume -R? [n] y

'ruby_1_8' branch on CVS is already applied the patch.
You rolled back tcltklib.c. :-)
If you can try the latest version on CVS,
please try it without the patch.
Wybo D. (Guest)
on 2006-04-11 00:48
(Received via mailing list)
On Mon, 10 Apr 2006, Hidetoshi NAGAI wrote:

> You rolled back tcltklib.c. :-)

Ah, I see... I thought that could not be the case because, before
doing the patch, I tried my test and it went wrong.

> If you can try the latest version on CVS,
> please try it without the patch.

I replaced tcltklib with the original and tried without patching:

Downloads>cvs -z4 -d :pserver:removed_email_address@domain.invalid:/src \
   checkout -r ruby_1_8 ruby/ext/tk/tcltklib.c
Downloads>cd ruby
ruby>make
ruby>./ruby -w ../warntest
/usr/local/lib/ruby/1.8/tk.rb:2313: warning: redefine encoding=
/usr/local/lib/ruby/1.8/tk.rb:2316: warning: redefine encoding
123.45
Segmentation fault
Hidetoshi NAGAI (Guest)
on 2006-04-11 05:29
(Received via mailing list)
From: Wybo D. <removed_email_address@domain.invalid>
Subject: Re: segfault with tk.rb
Date: Tue, 11 Apr 2006 05:48:21 +0900
Message-ID: <removed_email_address@domain.invalid>
> Ah, I see... I thought that could not be the case because, before
> doing the patch, I tried my test and it went wrong.

I'm very sorry that I'm bothering you.
But I want to ask you one more try.
At Apr. 6 01:04:47, I committed patches of tk.rb and tk/variable.rb
to remove some warnings.
Please check on the latest version of those.
Possibly, the result helps me to fix the SEGV trouble.
This topic is locked and can not be replied to.