Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > segfault with tk.rb

Reply
Thread Tools

segfault with tk.rb

 
 
Wybo Dekker
Guest
Posts: n/a
 
      03-28-2006
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?

--
Wybo


 
Reply With Quote
 
 
 
 
Hidetoshi NAGAI
Guest
Posts: n/a
 
      03-29-2006
From: Wybo Dekker <(E-Mail Removed)>
Subject: segfault with tk.rb
Date: Wed, 29 Mar 2006 07:23:55 +0900
Message-ID: <(E-Mail Removed)>
> 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.
--
Hidetoshi NAGAI ((E-Mail Removed))


 
Reply With Quote
 
 
 
 
Wybo Dekker
Guest
Posts: n/a
 
      03-29-2006
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__:rint_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


--
Wybo


 
Reply With Quote
 
Hidetoshi NAGAI
Guest
Posts: n/a
 
      03-29-2006
From: Wybo Dekker <(E-Mail Removed)>
Subject: Re: segfault with tk.rb
Date: Wed, 29 Mar 2006 17:43:43 +0900
Message-ID: <(E-Mail Removed)>
> 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:LATFORM'
* [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 Dekker <(E-Mail Removed)>
Subject: Re: segfault with tk.rb
Date: Wed, 29 Mar 2006 17:43:43 +0900
Message-ID: <(E-Mail Removed)>
> $ 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)

--
Hidetoshi NAGAI ((E-Mail Removed))


 
Reply With Quote
 
Wybo Dekker
Guest
Posts: n/a
 
      03-31-2006
On Thu, 30 Mar 2006, Hidetoshi NAGAI wrote:

>> 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.


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:LATFORM'


"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...

--
Wybo


 
Reply With Quote
 
Hidetoshi NAGAI
Guest
Posts: n/a
 
      04-01-2006
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 ((E-Mail Removed))


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
invoking a segfault within a segfault handler - is this undefinedbehavior? Andrey Vul C Programming 8 07-30-2010 02:14 PM
Adding empty copy constructor makes segfault go away? William Payne C++ 4 08-28-2004 06:09 AM
istream segfault Jim Strathmeyer C++ 4 07-23-2004 03:47 PM
multiset segfault Arthur J. O'Dwyer C++ 10 06-18-2004 03:21 AM
STL string segfault Vedran Vyroubal C++ 5 03-04-2004 07:56 AM



Advertisments