From: Kazuhiro N. <zn...@mb...> - 2007-05-11 07:51:45
|
西山和広です。 内容が変化するpopup menuのためGtk::Menuを繰り返し生成していると、 *** glibc detected *** corrupted double-linked list: 0x083700f0 *** などで落ちることがあるのですが、何が原因なのでしょうか? 環境はDebian etchで、libgtk2-rubyは0.15.0-1.1で、 % ruby1.8 -v ruby 1.8.5 (2006-08-25) [i486-linux] % ruby1.8 -r gtk2 -e 'p Gtk::VERSION' [2, 8, 20] % となっています。 この環境で以下のプログラムを実行していると5〜10秒ぐらいで 落ちます。 #!/usr/bin/ruby1.8 -Ku # -*- coding: utf-8 -*- require 'gtk2' def popup_menu return @popup_menu if @popup_menu @popup_menu = Gtk::Menu.new quit_menu_item = Gtk::MenuItem.new("_Quit") quit_menu_item.signal_connect("activate") do Gtk.main_quit end @popup_menu.append(quit_menu_item) @popup_menu.show_all return @popup_menu end def start_check Gtk.timeout_add(5) do if @popup_menu and not @using_popup menu = @popup_menu @popup_menu = nil p menu menu.destroy #GC.start end popup_menu true end end def start_gtk_window @window = Gtk::Window.new @window.show_all @window.add_events(Gdk::Event::BUTTON_PRESS_MASK) @window.signal_connect("destroy") do Gtk.main_quit end @window.signal_connect("button_press_event") do |widget, event| case event.button when 1 @using_popup = false when 3 @using_popup = true popup_menu.popup(nil, nil, event.button, event.time) end end end Gtk.init start_gtk_window start_check Gtk.main -- |ZnZ(ゼット エヌ ゼット) |西山和広(Kazuhiro NISHIYAMA) |