Multithreaded Gtk applications using Ruby bindings freeze
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
ruby-gnome2 (Ubuntu) |
Fix Released
|
Medium
|
Unassigned | ||
Karmic |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
Binary package hint: libgtk2-ruby
In Ubuntu 9.10 with the version of libgtk2-ruby from the repositories (0.19.0), new threads cause the Gtk main loop to freeze. As an example, the following code will never produce any output:
===== Impact =====
I don't know which program available directly within Ubuntu is written in Ruby-GTK+, but those which do and which are using the Ruby Thread class are broken, and of course developing such a program is broken too.
The fix is available in ruby-gnome2 since version 0.19.2 and was introduced through SVN revisions 3692[1] and 3694[2]. Both are within the attachment "ruby-gnome2-
[1] http://
[2] http://
TEST CASE:
require 'gtk2'
Thread.new do
sleep 1 # Look busy
exit # Finished, exit
end
# Main loop
loop do
# Process all currently pending events
Gtk.
print '.'
end
However, when the latest version of the bindings is installed (0.19.3) the program works as expected, filling the screen with dots.
TEST CASE 2:
Here is another example for reproducing this bug:
require "gtk2"
include Gtk, GLib
# Create widgets
window = Window.new
vbox = VBox.new(false, 2)
button = Button.new("Run Thread")
progress = ProgressBar.new
# Pack widgets
window.add(vbox)
vbox.add(button)
vbox.add(progress)
# Set default window size
window.
window.
window.show_all
# Connect signals
button.
Thread.new do
loop do
progress.pulse
sleep 1
end
end
end
window.
# Show all and run
main # start the GTK+ main loop
The test program shows a window with a button and a progress bar. Clicking the button will execute a Ruby Thread object, and the GUI visual elements/the GTK+ main loop will remain freezed.
REGRESSION:
The following applications use libgtk2-ruby and threads: fantasdic-1.0beta7 geekast-0.1.3 kazehakase-0.5.8 mhc-0.25.1+20090120 rbbr-0.6.0 xnetcardconfig-
The example in the bug description is supposed to print dots, and instead it doesn't.
This problem is also reported at:
http://
Related branches
tags: | added: patch |
description: | updated |
description: | updated |
description: | updated |
description: | updated |
I attach a patch (debdiff) for the package which fixes the use of Thread objects inside GTK+/GLib main loops. It worked fine for me. The patch includes the two patches from Ruby-GNOME2 0.19.2.