Package: reportbug
Version: 6.4.3
Followup-For: Bug #620225

Dear Maintainer,

I have been looking at this problem and I think I might have some clues on what
is causing the error.

>From what I could find in my searches (gdb mainly) the problem is related to
the fact the reportbug is updating the UI directly from a thread.

Apparently the right way to update the UI directly from a thread is to use
gobject.idle_add().

>From the traces I got from gdb it seems that the problem was coming from the
call to label.set_text () so I modified all the calls to that to use idle_add.
And everything seems to be working ok here, no crashes for me now.

I hope this helps or at least could give you some clues on how to fix the
problem.

I'm not a python programmer so please take my patch with a grain of salt :)


Best regards,

Bruno Ramos



-- Package-specific info:
** Environment settings:
DEBEMAIL="brunoramos...@gmail.com"
DEBFULLNAME="Bruno Filipe Oliveira Ramos"
INTERFACE="gtk2"

** /home/brunoramos/.reportbugrc:
reportbug_version "6.4.3"
mode standard
ui gtk2
no-cc
header "X-Debbugs-CC: brunoramos...@gmail.com"
smtphost reportbug.debian.org

-- System Information:
Debian Release: 7.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.2.0-4-amd64 (SMP w/8 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages reportbug depends on:
ii  apt               0.9.7.7
ii  python            2.7.3-3
ii  python-reportbug  6.4.3

reportbug recommends no packages.

Versions of packages reportbug suggests:
pn  claws-mail                                 <none>
pn  debconf-utils                              <none>
pn  debsums                                    <none>
pn  dlocate                                    <none>
ii  emacs23-bin-common                         23.4+1-4
ii  exim4                                      4.80-7
ii  exim4-daemon-light [mail-transport-agent]  4.80-7
ii  file                                       5.11-2
ii  gnupg                                      1.4.12-7
ii  python-gtk2                                2.24.0-3+b1
ii  python-gtkspell                            2.25.3-12
pn  python-urwid                               <none>
ii  python-vte                                 1:0.28.2-5
ii  xdg-utils                                  1.1.0~rc1+git20111210-6

Versions of packages python-reportbug depends on:
ii  apt               0.9.7.7
ii  python            2.7.3-3
ii  python-debian     0.1.21+nmu2
ii  python-debianbts  1.11
ii  python-support    1.0.15

python-reportbug suggests no packages.

-- no debconf information
--- reportbug/ui/gtk2_ui.py.orig	2013-02-02 00:28:38.063811988 +0100
+++ reportbug/ui/gtk2_ui.py	2013-02-02 00:28:47.891812223 +0100
@@ -616,7 +616,7 @@
 
     def execute (self, prompt, options=None, force_prompt=False, default=''):
         # Hackish: remove the text needed for textual UIs...
-        self.label.set_text (prompt.replace(' (enter Ctrl+c to exit reportbug without reporting a bug)', ''))
+        gobject.idle_add (self.label.set_text, prompt.replace(' (enter Ctrl+c to exit reportbug without reporting a bug)', ''))
         self.entry.set_text (default)
 
         if options:
@@ -673,7 +673,7 @@
     def execute (self, prompt):
         self.empty_ok = True
         # The result must be iterable for reportbug even if it's empty and not modified
-        self.label.set_text (prompt)
+        gobject.idle_add (self.label.set_text, prompt)
         self.buffer.set_text ("")
         self.buffer.emit ('changed')
 
@@ -762,7 +762,7 @@
     def execute (self, prompt):
         self.empty_ok = True
 
-        self.label.set_text (prompt)
+        gobject.idle_add (self.label.set_text, prompt)
 
         self.model = gtk.ListStore (str)
         self.model.connect ('row-changed', self.validate)
@@ -803,7 +803,7 @@
 
     def execute (self, par, options, prompt, default=None, any_ok=False,
                  order=None, extras=None, multiple=False):
-        self.label.set_text (par)
+        gobject.idle_add (self.label.set_text, par)
 
         self.model = gtk.ListStore (str, str)
         self.view.set_model (self.model)
@@ -1011,7 +1011,7 @@
         return matches
 
     def execute (self, buglist, sectitle):
-        self.label.set_text ("%s. Double-click a bug to retrieve and submit more information." % sectitle)
+        gobject.idle_add (self.label.set_text, "%s. Double-click a bug to retrieve and submit more information." % sectitle)
 
         self.model = gtk.TreeStore (*([str] * len (self.columns)))
         for category in buglist:
@@ -1089,7 +1089,7 @@
         message = message % args
         # make it all on one line, it will be wrapped at display-time
         message = ' '.join(message.split())
-        self.label.set_text (message)
+        gobject.idle_add (self.label.set_text, message)
         # Reportbug should use final_message, so emulate it
         if ('999999' in message):
             self.set_page_type (gtk.ASSISTANT_PAGE_CONFIRM)
@@ -1215,7 +1215,7 @@
             self.default.grab_focus ()
 
     def execute (self, prompt, menuopts, options):
-        self.label.set_text (prompt)
+        gobject.idle_add (self.label.set_text, prompt)
 
         buttons = []
         for menuopt in menuopts:
@@ -1294,7 +1294,7 @@
         return vbox
 
     def set_label (self, text):
-        self.label.set_text (text)
+        gobject.idle_add (self.label.set_text, text)
 
     def reset_label (self):
         self.set_label ("This operation may take a while")

Reply via email to